これは、処理する電子メールのキューが常に存在するため、実行する必要のある作業が常に多い状況です。parallel.foreachで生成された例外がログに記録されることを確認したいと思います。私が見つけた例はすべて、例外を処理する前に、キュー(この場合はMailToDownload)が終了するまで待機します。私の状況では、例外をどのように処理する必要がありますか?
以下は、メソッドの作成方法の基本的な例です。最初のタスクは、データベースからプルする電子メールのリストをプルします。メールアカウントがメールを受信するたびに、メールアドレスがテーブルに挿入されるため、常にデータがあります。
Sub Main()
Dim MailToDownload As New BlockingCollection(Of myMail)
Task.Factory.StartNew(Sub()
For i As Integer = 0 To 99
MailToDownload.Add(New myMail With {.id = i})
System.Threading.Thread.Sleep(1000)
Next
End Sub)
Task.Factory.StartNew(Sub()
Dim options As ParallelOptions = New ParallelOptions With {.MaxDegreeOfParallelism = 16}
Parallel.ForEach(MailToDownload.GetConsumingPartitioner(), options, Sub(item) doSomething(item))
End Sub)
End Sub
すべての例外を別のblockingcollectionにロードして処理し、それらを処理するために別のスレッドを生成する必要があると考えています。