如何在web api方法中调用相互关联的异步方法



我有一个web api方法,需要从另一方调用2个异步方法,并且需要第一个异步方法的结果才能调用第二个异步方法。我有一些类似下面的代码,它显然不适用于await关键字,我的理解是它将转到下一行并继续,同时向调用方返回一个Task对象。

对这个方法的简单解释是,我需要从第三方异步方法中获得一个令牌,然后,在令牌的基础上,我需要做一些事情,然后使用令牌再次调用第三方的另一个aysnc方法。

public async Task<ResponseObj> DoSomething()
{
var token = await GetTokenAsync();
DoStuff1();
var stuff = await CreateStuff(token);
SaveStuff(stuff);
ResponseObj response = new ResponseObj(stuff);
return response;
}

我在网上读了一些文章和例子,有些人说我可以使用Task.Result,而不是等待,这样下一个依赖的调用就不会运行,直到任务返回结果,有些人使用Task.Wait,看起来它会等到任务完成。我尝试了这两种方法,但都没有达到预期的结果,在获得GetTokenAsync的结果之前,CreateStuffAsync无法启动。

有人能指出我做错了什么吗?假设第一个等待已经将任务返回给调用者,那么当到达第二个等待时会发生什么?在方法中,我是否应该有不超过1个等待,尤其是当一个依赖另一个时?

该代码是正确的,因为它正在等待第一个async调用,获得结果,然后继续第二个async调用。

最新更新