我想循環一個數據表與更多然後100 000行使用平行對於每個。一切工作正常,大約25000次迭代。我沒有得到任何錯誤,我看到應用程序仍在工作,但它有點阻擋,沒有發生。我試圖將這個循環封裝在一個factory.startnew中,我毫無理由地在大約5000次迭代中得到了一個隨機的異常期望。並行爲每一個進入DeadLock
Dim lstExceptions As New ConcurrentQueue(Of Exception)
Dim options As New ParallelOptions
options.MaxDegreeOfParallelism = 3
Parallel.ForEach(ReservationReportDS.Tables(0).AsEnumerable(), options,
Sub(row)
Try
Dim tmpRow As DataRow = CType(row, DataRow)
Dim ReservationID As Integer = tmpRow.Field(Of Integer?)("autNoReservation")
Dim customerID As Integer = tmpRow.Field(Of Integer?)("CustomerID")
Dim VehiculeID As Integer = tmpRow.Field(Of Integer?)("autNoVehicule")
Dim bill As New BillingPath()
bill.Calculate_Billing(ReservationID, customerID, VehiculeID)
Catch err As Exception
lstExceptions.Enqueue(err)
End Try
End Sub
)
If (lstExceptions.Count > 0) Then
Throw New AggregateException(lstExceptions)
End If
Catch errAgg As AggregateException
For Each ex As Exception In errAgg.InnerExceptions
Log(Log_Billing_UI, "", System.Reflection.MethodBase.GetCurrentMethod().Name & GetExceptionInfo(ex))
Next
Catch ex As Exception
Log(Log_Billing_UI, "", System.Reflection.MethodBase.GetCurrentMethod().Name & GetExceptionInfo(ex))
End Try
您可以添加錯誤堆棧跟蹤 – Massanu
1)'bill.Calculate_Billing'是否寫入DataSet? 2)數據庫的設計經過精心研究,可以爲這類事情工作,所以它可能是一個很好的選擇。另外,數據庫中的數據是持久的。 –
沒有錯誤,它只是簡單的阻止。沒有線程使用相同的數據很好。 1)是的Calculate_Billing會做1插入95%的時間,5%2或3.但通話使許多選擇(至少10) –