Cut*_*ert 2 .net c# asynchronous async-await
关于堆栈溢出的一些帖子提示如下:
任何异步方法,你有一个await表达式等待任务或任务<T>,在方法的最后没有进一步处理,最好不使用async/await写入.
这个建议仅针对特定情况吗?在Web服务器上,不是使用的主要原因之一async/await,因为在等待UpdateDataAsync下面的方法时,Thread将返回到ThreadPool,允许服务器处理其他请求?
应该SaveDataAsync等待数据库更新调用,因为它是方法中的最后一次调用?
public async Task WorkWithDataAsync(Data data)
{
ManipulateData(data);
await SaveDataAsync(data);
await SendDataSomewhereAsync(data);
}
public async Task SaveDataAsync(Data data)
{
FixData(data);
await DBConnection.UpdateDataAsync(data);
}
Run Code Online (Sandbox Code Playgroud)
另外,鉴于你不知道SaveDataAsync将在哪里使用,使它同步会伤害一个方法,就像WorkWithDataAsync它不会?
删除await并且仅返回Task 不会使方法同步. await是一个使方法异步更容易的工具.这不是使方法异步的唯一方法.它就在那里因为它允许你比没有它更容易添加任务的延续,但是在你已经显示的方法中你实际上await并没有利用关键字来完成任何事情,因此你可以删除它并拥有代码功能完全相同.
(注意,从技术上讲,异常的语义会因删除而略有改变async;抛出的异常将从方法中抛出Task,如果对你很重要,不会包含在返回的内容中.就任何调用者而言,这是唯一可观察的区别.)