在PLINQ中,異常處理的方式與普通的LINQ操作類似。當在PLINQ查詢中發生異常時,異常將被封裝在AggregateException對象中,并通過調用Handle方法來處理異常。
以下是一個處理異常的示例代碼:
try
{
var query = from num in numbers.AsParallel()
where num % 2 == 0
select 100 / num;
query.ForAll(Console.WriteLine);
}
catch (AggregateException ex)
{
foreach (var innerException in ex.InnerExceptions)
{
Console.WriteLine($"Exception: {innerException.Message}");
}
}
在上面的示例中,如果在計算100除以某個數字時拋出異常,則異常將被封裝在AggregateException對象中,并通過遍歷InnerExceptions屬性來訪問所有的內部異常。
另外,可以通過使用WithCancellation方法來提供一個CancellationToken對象,以便在取消操作時處理異常。
var cts = new CancellationTokenSource();
cts.CancelAfter(500); // 取消操作在500毫秒后執行
try
{
var query = from num in numbers.AsParallel().WithCancellation(cts.Token)
where num % 2 == 0
select 100 / num;
query.ForAll(Console.WriteLine);
}
catch (OperationCanceledException)
{
Console.WriteLine("Query was cancelled.");
}
在上面的示例中,如果在取消操作之前發生異常,則會拋出OperationCanceledException異常。