【发布时间】:2015-10-03 02:33:11
【问题描述】:
我正在使用 VB.Net、MVC 5、Visual Studio 2013。我有一个关于代码审查的问题here,其中建议我将我的一些视图模型函数设为异步。我正在尝试执行此建议。
我的视图模型中有一个由操作调用的方法(这部分似乎运行良好):
Async Function getItemHistory(itemID As Integer, itemTypeID As Integer) As Threading.Tasks.Task(Of ItemHistoryPresentationModel)
Dim returnModel = New ItemHistoryPresentationModel
Dim getOperatorsTask As Task(Of List(Of String)) = getOperatorsAsync(itemID)
Dim getItemNameTask As Task(Of String) = getItemNameAsync(itemTypeID)
Await Task.WhenAll(getOperatorsTask, getItemNameTask)
returnModel.ItemTypeString = getItemNameTask.Result
returnModel.Operators = getOperatorsTask.Result
Return returnModel
End Function
我遇到的问题在我的getItemNameAsync 和getOperatorsAsync:
Async Function getItemNameAsync(itemTypeID As Integer) As Task(Of String)
Dim itemName = (From row In db.tblCategories
Where row.Item_Type_Identifier = itemTypeID
Select row.Item_Type).SingleOrDefault()
Return itemName
End Function
这个函数给了我一个警告:
此异步方法缺少“等待”运算符,因此将同步运行。考虑使用“Await”运算符来等待非阻塞 API 调用,或使用“Await Task.Run(...)”在后台线程上执行 CPU 密集型工作。
我的印象是getItemHistory 中的Await 会为我解决这个问题。
消除此警告的正确方法是什么?
【问题讨论】:
-
从“叶子”(即数据库访问函数)开始并更改它们以使用异步 APIfirst 更合适。然后让
async/await从那里开始增长,直到你的控制器方法是异步的。
标签: .net vb.net asynchronous