Поиск…


Основное использование 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