Tôi có một số mã đơn giản như một repro:chờ vào một nhiệm vụ với một Tiếp tục OnlyOnFaulted gây ra AggregateException
var taskTest = Task.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(5000);
}).ContinueWith((Task t) =>
{
Console.WriteLine("ERR");
}, TaskContinuationOptions.OnlyOnFaulted);
try
{
Task.WaitAll(taskTest);
}
catch (AggregateException ex)
{
foreach (var e in ex.InnerExceptions)
Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
}
Tuy nhiên, tôi nhận được một TaskCanceledException bất ngờ bị ném trong khối try catch (đó là trong Đối tượng ngoại lệ AggregateException). "Một tác vụ đã bị hủy".
Tại sao tôi nhận được ngoại lệ này? Continuation cho công việc không bao giờ cháy, không có ngoại lệ được tạo ra bởi nó, nhưng tôi vẫn nhận được ngoại lệ tổng hợp khi chờ đợi ....
Tôi hy vọng ai đó có thể giải thích cách này có ý nghĩa với tôi :)
tôi đã hoàn toàn kịch bản tương tự như bạn. Tôi nghĩ rằng nó sẽ được thanh lịch hơn và trực quan để chỉ tuyên truyền kết quả của nhiệm vụ trước đó thay thế. Ném một TaskCanceledException là khá đáng ngạc nhiên ... – NickL