簡體   English   中英

並行運行多個任務。 如何獲取TaskCancelledException背后的原因?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM