zoukankan      html  css  js  c++  java
  • Task_等待任务完成几种方式

    1.0 ContinueWith

    在ContinueWith会得到上个任务的结果并且可以用IsFaulted判断上个任务是否出现异常!

      var t = Task.Run(() => { throw new Exception(""); });
                //如果有异常
                t.ContinueWith(c =>
                {
                    if (c.IsFaulted)
                    {
                        Console.WriteLine("发生了异常,但不被系统抛出来了,但是此时获取上个任务的结果会抛出异常");
    
                    }
                });
                Console.ReadKey();

    2.0 OnCompleted

    //先输出 已经开始执行,其次才是第一句
                var t = Task.Run(() => { Thread.Sleep(1500); throw new Exception("");});
                t.GetAwaiter().OnCompleted(() => { Console.WriteLine("这里是执行完后自动的回调事件"); });
                Console.WriteLine("已经开始执行");
                Console.ReadKey();
    

    3.0 t.GetAwaiter().GetResult,t.Wait(),t.Result

     var t = Task.Run(() => { Thread.Sleep(1500);  });
                t.GetAwaiter().GetResult();
                Console.WriteLine("上面会阻塞线程获取结果");
                Console.ReadKey();
    

    4.0  await,这就不演示了,配合async关键字使用!具体可以看我另一篇文章

    5.0  Task.WaitAny,Task.WaitAll

  • 相关阅读:
    MVC5+EF6 入门完整教程七
    MVC5+EF6 入门完整教程六
    MVC5+EF6 入门完整教程五
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
    MVC5 + EF6 入门完整教程
    最短路径简析
    PAT 1147 Heaps
    PAT 1146 Topological Order
  • 原文地址:https://www.cnblogs.com/entclark/p/8379876.html
Copyright © 2011-2022 走看看