【发布时间】:2016-02-09 22:55:57
【问题描述】:
根据本文,我在 WebApi 控制器中使用 async/await: https://msdn.microsoft.com/en-us/magazine/dn802603.aspx
看看我的控制器中的这个简化代码:
DataBaseData = await Task.Run( () => GetDataFunction() );
GetDataFunction 是一个函数,它将打开一个数据库连接,打开一个阅读器并从数据库中读取数据。
在许多示例中,我看到它的处理方式不同。等待 GetDataFunction 本身。在函数中,每一步都在等待。 例如:
- connection.OpenAsync
- reader.ReadAsycnc
- reader.IsDBNullAsync
为什么这是一个好的做法?为什么不为整个数据库访问启动一个线程(使用 Task.Run)?
更新: 谢谢您的帮助。现在我知道了。我没有得到,异步 Api 本身不会启动线程。这真的很有帮助:blog.stephencleary.com/2013/11/there-is-no-thread.html
【问题讨论】:
-
我不明白 async/await 是如何工作的。但我不明白为什么我需要在 WebApi 控制器中进行精细的异步/等待处理。它用于确保将请求线程返回到池中。只需等待 Task.Run 也会这样做。
-
有人能解释一下为什么我对此投反对票吗?
标签: c# asp.net-web-api async-await