c# - 异步/等待功能比较

标签 c# async-await

我正在尝试理解 async/await,我想知道这两种方法是否工作相同。如果不是,您能解释一下原因吗?

       public async Task<Client> GetClient()
        {
            return await _clientRepository.GetAll().Where(x => x.Id == 1).FirstOrDefaultAsync();
        }

        public Task<Client> GetClient2()
        {
            return Task.FromResult(_clientRepository.GetAll().Where(x => x.Id == 1).FirstOrDefault());
        }

public async Task Run()
{
        var result = await GetClient();
        var result2 = await GetClient2();
}

最佳答案

它们不一样,当你添加 async 关键字时,你启用了以下两个功能。

  • 标记的async方法可以使用Await或await来指定挂起点。 await 运算符告诉编译器,在等待的异步过程完成之前,async 方法无法继续通过该点。同时,控制权返回给异步方法的调用者。

    在 await 表达式中暂停异步方法并不构成该方法的退出,finally block 不会运行。

  • 标记的异步方法本身可以被调用它的方法等待。

您应该在此处阅读异步/等待文档:https://msdn.microsoft.com/en-us/library/hh191443.aspx

关于c# - 异步/等待功能比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320743/

相关文章:

c# - 可扩展的 Linq 查询

c# - 将字符串查询传递给wcf并从db检索数据

c# - 反转数学函数

flutter - 异步方法在Flutter中返回null

c# - Nito.AsyncEx.AsyncLock 堆栈溢出,带有大量等待者和同步快速路径

c# - 使用 HttpWebRequest.GetResponseAsync 进行异步和等待

c# - ASP :menu with image has padding above

c# - 为 Web API Controller 创建 MVC Controller 代理

c# - 异步/等待示例

c# - 异步/等待限制