Using Tasks with conditional continuations

前端 未结 3 1275
一整个雨季
一整个雨季 2020-12-29 21:54

I\'m a little confused about how to use Tasks with conditional Continuations.

If I have a task, and then I want to continue with a tasks that handle success and erro

3条回答
  •  余生分开走
    2020-12-29 22:38

    I think your main problem is that you're telling those two tasks to "Wait" with your call to

    Task.WaitAll(onSuccess, onError);
    

    The onSuccess and onError continuations are automatically setup for you and will be executed after their antecedent task completes.

    If you simply replace your Task.WaitAll(...) with taskThrows.Start(); I believe you will get the desired output.

    Here is a bit of an example I put together:

    class Program
    {
        static int DivideBy(int divisor) 
        { 
          Thread.Sleep(2000);
          return 10 / divisor; 
        }
    
        static void Main(string[] args)
        {
            const int value = 0;
    
            var exceptionTask = new Task(() => DivideBy(value));
    
            exceptionTask.ContinueWith(result => Console.WriteLine("Faulted ..."), TaskContinuationOptions.OnlyOnFaulted | TaskContinuationOptions.AttachedToParent);
            exceptionTask.ContinueWith(result => Console.WriteLine("Success ..."), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
    
            exceptionTask.Start();
    
            try
            {
                exceptionTask.Wait();
            }
            catch (AggregateException ex)
            {
                Console.WriteLine("Exception: {0}", ex.InnerException.Message);
            }
    
            Console.WriteLine("Press  to continue ...");
            Console.ReadLine();
        }
    }
    

提交回复
热议问题