Visual Basic .NET Language
Асинхронный шаблон на основе задач
Поиск…
Основное использование Async / Await
Вы можете начать медленный процесс параллельно, а затем собрать результаты, когда они будут выполнены:
Public Sub Main()
Dim results = Task.WhenAll(SlowCalculation, AnotherSlowCalculation).Result
For Each result In results
Console.WriteLine(result)
Next
End Sub
Async Function SlowCalculation() As Task(Of Integer)
Await Task.Delay(2000)
Return 40
End Function
Async Function AnotherSlowCalculation() As Task(Of Integer)
Await Task.Delay(2000)
Return 60
End Function
Через две секунды оба результата будут доступны.
Использование TAP с LINQ
Вы можете создать IEnumerable
of Task
, передав AddressOf AsyncMethod
LINQ Select
а затем запустите и ждите все результаты с помощью Task.WhenAll
Если ваш метод имеет параметры, соответствующие предыдущему цепочному вызову LINQ , они будут автоматически сопоставлены.
Public Sub Main()
Dim tasks = Enumerable.Range(0, 100).Select(AddressOf TurnSlowlyIntegerIntoString)
Dim resultingStrings = Task.WhenAll(tasks).Result
For Each value In resultingStrings
Console.WriteLine(value)
Next
End Sub
Async Function TurnSlowlyIntegerIntoString(input As Integer) As Task(Of String)
Await Task.Delay(2000)
Return input.ToString()
End Function
Чтобы сопоставить различные аргументы, вы можете заменить AddressOf Method
на лямбда:
Function(linqData As Integer) MyNonMatchingMethod(linqData, "Other parameter")
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow