在 LINQ 中使用 TAP

你可以通過將 AddressOf AsyncMethod 傳遞給 LINQ Select 方法建立 IEnumerable 的 IEnumerable ,然後使用 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

要對映不同的引數,你可以用 lambda 替換 AddressOf Method:

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