等待最后一个方法调用

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它不会?

Ser*_*rvy 6

删除await并且仅返回Task 不会使方法同步. await是一个使方法异步更容易的工具.这不是使方法异步的唯一方法.它就在那里因为它允许你比没有它更容易添加任务的延续,但是在你已经显示的方法中你实际上await没有利用关键字来完成任何事情,因此你可以删除它并拥有代码功能完全相同.

(注意,从技术上讲,异常的语义会因删除而略有改变async;抛出的异常将从方法中抛出Task,如果对你很重要,不会包含在返回的内容中.就任何调用者而言,这是唯一可观察的区别.)