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
2秒後に両方の結果が表示されます。
TAPとLINQの使用
あなたは、作成することができますIEnumerable
の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
をlambdaに置き換えることができます。
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