在 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")