我有一个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无法启动。
有人可以指出我做错了什么吗?假设第一个await已经将任务返回给调用者,那么当第二个await到达时会发生什么?我不应该在方法中等待多于1个,特别是当一个人依赖另一个时?
答案 0 :(得分:0)
该代码是正确的,因为它正在等待第一个async
调用,获得结果,然后继续第二个async
调用。