代码之家  ›  专栏  ›  技术社区  ›  vico

TaskContinuationOptions.OnlyOnCancelled创建取消

c#
  •  0
  • vico  · 技术社区  · 6 年前

    exception details: A task was canceled.
    

    只是在想为什么要加 TaskContinuationOptions.OnlyOnCanceled OnlyOnCanceled 创建取消?

     class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("starting");
                Task<int> t = Task.Run(() => 42)
                    .ContinueWith((i) =>
                    {
                        Console.WriteLine("Canceled");
                        return i.Result * 2;
                    }, TaskContinuationOptions.OnlyOnCanceled);
    
    
    
    
                Console.WriteLine("ending");
    
                try
                {
    
                    Console.WriteLine("ret {0}", t.Result);
                }
                catch (AggregateException ae)
                {
                    ae.Handle(ex => { Console.WriteLine("exception details: {0}",ex.Message);
                        return true;
                    });
                }
    
                Console.ReadLine();
    
    
    
            }
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   opewix    6 年前

    OnlyOnCanceled 告诉在中定义的第二个任务 ContinueWith 方法仅在取消父任务时运行。

    因为第一个任务没有被取消,所以第二个任务由于不应该运行而被取消。