在这种情况下,总是有更多工作要做,因为总是有一系列电子邮件要处理。我想确保将记录 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
我在想我应该通过将所有异常加载到另一个阻塞集合中来处理所有异常并产生一个不同的线程来处理这些异常。