Ricerca…


Utilizzo di base di Async / Attesa

È possibile avviare un processo lento in parallelo e quindi raccogliere i risultati quando vengono eseguiti:

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

Dopo due secondi entrambi i risultati saranno disponibili.

Utilizzo di TAP con LINQ

È possibile creare un IEnumerable di Task passando AddressOf AsyncMethod al LINQ Select metodo e quindi avviare e attendere tutti i risultati con Task.WhenAll

Se il tuo metodo ha parametri corrispondenti alla precedente chiamata a catena LINQ , verranno automaticamente mappati.

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

Per mappare diversi argomenti è possibile sostituire il AddressOf Method con un lambda:

Function(linqData As Integer) MyNonMatchingMethod(linqData, "Other parameter")


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow