在内部调用另一个异步方法时,方法签名中是否需要async关键字?

时间:2015-11-09 06:33:12

标签: c# asynchronous

这是一个C#异步代码段。 GetAsync与GetAsync2相同吗? GetAsync是正确的实现吗?

    public Task<IHttpActionResult> GetAsync()
    {
        return GetOneAsync();
    }
    public async Task<IHttpActionResult> GetAsync2()
    {
        return await GetOneAsync();
    }
    private async Task<IHttpActionResult> GetOneAsync()
    {
        using (var httpClient = new HttpClient())
        {
            await httpClient.GetAsync("http://baidu.com");
        }
        return Ok();
    }

1 个答案:

答案 0 :(得分:1)

不一样。 GetAsync不会生成状态机,也不会等待GetOneAsync的结果,这是此方法中不需要async方法的结果时的首选选项。

生成的代码效率更高,并且不生成状态机,也不需要上下文切换。

有关详细信息,请参阅Understanding the cost of Async/Await文章。