VB.Net异步使用wait正确
我正在使用VB.Net、MVC5和Visual Studio 2013。我有一个关于代码审查的问题,其中有人建议我将一些视图模型函数设置为异步。我正在努力实施这一建议 我的视图模型中有一个由操作调用的方法(这一部分似乎工作得很好): 我遇到的问题是在我的VB.Net异步使用wait正确,.net,vb.net,asynchronous,.net,Vb.net,Asynchronous,我正在使用VB.Net、MVC5和Visual Studio 2013。我有一个关于代码审查的问题,其中有人建议我将一些视图模型函数设置为异步。我正在努力实施这一建议 我的视图模型中有一个由操作调用的方法(这一部分似乎工作得很好): 我遇到的问题是在我的getItemNameAsync和getOperatorAsync中: Async Function getItemNameAsync(itemTypeID As Integer) As Task(Of String) Dim itemN
getItemNameAsync
和getOperatorAsync
中:
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”运算符,因此将同步运行。考虑使用“Acess”操作符等待非阻塞API调用,或“等待任务.Run(…)”在后台线程上执行CPU绑定的工作。
我的印象是getItemHistory
中的Await
将为我解决这个问题
消除此警告的正确方法是什么?您需要使
getItemNameAsync
不标记为async
并使其同步(但这需要您更改getItemHistory
),或者如果您使用Enity Framework,则需要使用其扩展方法使其返回任务
Async Function getItemNameAsync(itemTypeID As Integer) As Task(Of String)
Dim itemName = Await (From row In db.tblCategories
Where row.Item_Type_Identifier = itemTypeID
Select row.Item_Type).SingleOrDefaultAsync()
Return itemName
End Function
您还可以使其不异步
,直接返回任务
Function getItemNameAsync(itemTypeID As Integer) As Task(Of String)
Dim itemNameTask = (From row In db.tblCategories
Where row.Item_Type_Identifier = itemTypeID
Select row.Item_Type).SingleOrDefaultAsync()
Return itemNameTask
End Function
更合适的做法是从“leaves”(即数据库访问函数)开始,首先将其更改为使用异步API。然后让
async
/等待
从那里增长,直到控制器方法是异步的。
Function getItemNameAsync(itemTypeID As Integer) As Task(Of String)
Dim itemNameTask = (From row In db.tblCategories
Where row.Item_Type_Identifier = itemTypeID
Select row.Item_Type).SingleOrDefaultAsync()
Return itemNameTask
End Function