[英]Task.WaitAll and cancelled tasks
我有兩個ContinueWith來執行任務。 第一個處理任務成功完成時的情況,第二個處理失敗的情況。 然后我等到其中一個完成。 示例代碼如下:
var task = Task.Factory.StartNew(() => { Console.WriteLine("Task is finished"); });
var success = task.ContinueWith(
t => Console.WriteLine("Success")
, TaskContinuationOptions.OnlyOnRanToCompletion
);
var failed = task.ContinueWith(
t => Console.WriteLine("Failed")
, TaskContinuationOptions.NotOnRanToCompletion
);
try
{
Task.WaitAll(success, failed);
}
catch (AggregateException ex)
{
Console.WriteLine(ex.InnerException.Message);
}
我的問題是,是否有可能重寫它以避免TaskCanceledException提升?
當你想要成功和失敗的處理程序時,我沒有太多理由將它們放在單獨的ContinueWith()
調用中。 一次調用總是應該足夠了:
var continuation = task.ContinueWith(
t =>
{
if (t.IsFaulted)
Console.WriteLine("Failed");
else
Console.WriteLine("Success");
});
continuation.Wait();
假設task
永遠不會被取消,這將與原始代碼幾乎相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.