データを非同期に処理するさまざまな方法を試してきました。画像処理アプリケーションでこのようなタスクを実行するコード ブロックがありますが、私には扱いにくいように思えます。現在の標準に合わせた提案、または従うべきコーディング規則を探しています。
' this code is run on a background thread
Dim lockThreadCounter As New Object()
Dim runningThreadCounter As Integer = 0
Dim decrementCounterCallback As New AsyncCallback(
Sub()
SyncLock lockThreadCounter
runningThreadCounter -= 1
End SyncLock
End Sub)
runningThreadCounter += 1
widthsAdder.BeginInvoke(widthsSlow, decrementCounterCallback, Nothing)
runningThreadCounter += 1
widthsAdder.BeginInvoke(widthsFast, decrementCounterCallback, Nothing)
runningThreadCounter += 1
bruteForceCalculateR2.BeginInvoke(numberOfSamples, pixelsSlow, decrementCounterCallback, Nothing)
runningThreadCounter += 1
bruteForceCalculateR2.BeginInvoke(numberOfSamples, pixelsFast, decrementCounterCallback, Nothing)
' wait here for all four tasks to complete
While runningThreadCounter > 0
Thread.Sleep(1)
End While
' resume with the rest of the code once all four tasks have completed
考えてみましParallel.Foreach
たが、タスクのデリゲートのフットプリントが異なるため、それを使用したソリューションを思いつくことができませんでした。