如何在web api方法中调用与inter相关的异步方法

时间:2017-02-02 22:37:17

标签: c# .net asynchronous async-await asp.net-web-api2

我有一个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个,特别是当一个人依赖另一个时?

1 个答案:

答案 0 :(得分:0)

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