【发布时间】:2019-04-08 23:46:49
【问题描述】:
我对如何实现异步等待方法并在继续之前等待结果有点困惑。
我想并行调用 3 次后端并等待它们直到它们响应然后获取结果并在内部分配它们。 像这样的:
Private Sub GetParseExpressionResults()
If Not isParseExpressionSupported Then
Return
End If
'Cleaning collections
Me.parseExpressionItemsTo.Clear()
Me.parseExpressionItemsCC.Clear()
Me.parseExpressionItemsSubject.Clear()
'Getting list of document ids
Dim docIds As List(Of Integer) = DocumentsToSend.Select(Function(doc) doc.id).ToList()
'Getting all the parse expression and then wait for them
Dim taskTo As Threading.Tasks.Task(Of List(Of ParseExpressionItem)) = GetParseExpression(txtTo.Text, docIds)
Dim taskCC As Threading.Tasks.Task(Of List(Of ParseExpressionItem)) = GetParseExpression(txtCC.Text, docIds)
Dim taskSubject As Threading.Tasks.Task(Of List(Of ParseExpressionItem)) = GetParseExpression(txtSubject.Text, docIds)
Threading.Tasks.Task.WaitAll(taskTo, taskCC, taskSubject)
Me.parseExpressionItemsTo = taskTo.Result
Me.parseExpressionItemsCC = taskCC.Result
Me.parseExpressionItemsSubject = taskSubject.Result
End Sub
Private Async Function GetParseExpression(ByVal text As String, ByVal docIds As List(Of Integer)) As Threading.Tasks.Task(Of List(Of ParseExpressionItem))
If String.IsNullOrEmpty(text) Then
Return New List(Of ParseExpressionItem)
End If
Dim result As List(Of ParseExpressionItem) = ClientActiveSession.Session.getParseExpression(text, docIds)
Return result
End Function
这段代码的问题是等待语句。似乎无法使用它,因此在这种情况下,代码将同步运行,实际上 VS 正在警告我。 非常感谢。
【问题讨论】:
-
为了
Await您的任务而不是使用.WaitAll或.Result,您需要将您的GetParseExpressionResults方法变成一个返回Task并具有Async的函数关键字,就像使用GetParseExpression一样。 -
(如果你做了我刚才提到的事情,那么你可以使用
Await Task.WhenAll(...)和Me.parseExpressionItemsTo = Await taskTo,例如。
标签: .net vb.net async-await task