Parallel.ForEach方法使用Task Parallel Library來并行執行循環中的操作。當異常發生時,Parallel.ForEach方法會捕獲并封裝異常,然后將其傳遞給主線程,而不會中斷整個循環。在主線程中,您可以通過調用ParallelLoopResult對象的異常屬性來檢查是否有任何異常發生。您可以使用try-catch塊來處理這些異常,如下所示:
try
{
Parallel.ForEach(collection, item =>
{
// Your code here
});
}
catch (AggregateException ex)
{
foreach (var innerException in ex.InnerExceptions)
{
// Handle each individual exception
}
}
在上面的代碼中,異常將被捕獲并封裝為AggregateException對象。然后,您可以通過遍歷InnerExceptions屬性來處理每個異常。請注意,可能會有多個異常發生,因此需要遍歷InnerExceptions屬性來處理它們。
另外,您還可以通過設置ParallelOptions對象的MaxDegreeOfParallelism屬性來控制并行執行的最大線程數,并通過設置CancellationToken對象來取消并行操作。這樣您可以更好地控制并行執行過程中的異常處理和線程管理。