在异步方法中没有await
运算符的“分支”是否正确?
public async Task<Person> GetName(string name)
{
if (string.IsNullOrWhiteSpace(name))
{
return null;
}
return await _database.Logins.FirstOrDefaultAsync(i => i.Name.Contains(name));
}
异步方法需要在其正文中使用await关键字,否则它们会 从不屈服!
如果在异步方法的主体中没有使用await,那么C# 编译器会生成一个警告,但代码将编译并运行为 如果这是一种正常的方法。请注意,这也是令人难以置信的 低效
这是否适用于我的方法,因为它包含await
,但不适用于每个分支
谢谢!
答案 0 :(得分:3)
是的,在async
方法中有一些实际上是同步的路径是完全可以接受的。
您通常只希望拥有这样的路径(如您的样本中所示),快速&#34;成功/失败的路径,它只是&#34;慢&#34;使用await
实际可以获益的路径。
答案 1 :(得分:3)
如果您有async
个装饰方法,那么编译器会将null
转换为Task.FromResult<Person>(null)
。
如果你的方法在它的主体中有一个await
,那么编译器实际上会生成一个类,它是一个跟踪所有await
延续的状态机,所以你的代码在每个后都按预期运行你等待的任务完成。状态机类将保留所有变量和堆栈。