簡體   English   中英

Task.WaitAll和取消的任務

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

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