[英]Running multiple tasks in parallel. How to get the reason behind a TaskCancelledException?
這是我的代碼:
foreach (var batch in listOfBatches)
{
var baseTask = Task.Run(() => GetResult(batch));
backgroundTasks.Add(baseTask);
}
var combinedTask = Task.WhenAll(backgroundTasks);
var selections = combinedTask.ContinueWith(task => task.Result.SelectMany(x => x).ToList(),
TaskContinuationOptions.OnlyOnRanToCompletion);
return selections.Result;
GetResult有時會為其中一個批次拋出異常。 在這種情況下,我希望用戶查看GetResult拋出的實際異常是什么。 但是,輸出不是實際的異常,而是TaskCancelledException。 如何提取GetResult引發的異常,以便用戶可以看到它?
不要使用ContinueWith
向任務添加延續。 使用await
。 除其他外,它具有更加直觀的錯誤處理語義。 如果您await
WhenAll
返回的任務,則當前方法的任務將被標記為有故障,並且表示傳遞給WhenAll
的任務中的第一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.