1、Task的优势

1、Task的优势

  ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便。比如:
  ◆ ThreadPool不支持线程的取消、完成、失败通知等交互性操作;
  ◆ ThreadPool不支持线程执行的先后次序;
  以往,如果开发者要实现上述功能,需要完成很多额外的工作,现在,FCL中提供了一个功能更强大的概念:Task。Task在线程池的基础上进行了优化,并提供了更多的API。在FCL4.0中,如果我们要编写多线程程序,Task显然已经优于传统的方式。
  以下是一个简单的任务示例:

    async/await的实现:

 

using System;
using System.Threading.Tasks;

namespace ConsoleApp1
{
  class Program
  {
    public static void Main()
    {
      var ret1 = AsyncGetsum();
      Console.WriteLine("主线程执行其他处理");
      for (int i = 1; i <= 3; i++)
        Console.WriteLine("Call Main()");
      int result = ret1.Result; //阻塞主线程
      Console.WriteLine("任务执行结果:{0}", result);
     }

     async static Task<int> AsyncGetsum()
     {
      await Task.Delay(1);
      int sum = 0;
      Console.WriteLine("使用Task执行异步操作.");
      for (int i = 0; i < 100; i++)
      {
        sum += i;
      }
      return sum;
     }
  }
}

上一篇:如何管理默认的Java SwingWorker线程池?


下一篇:线程池创建的核心:1.三大方法 2.七大参数 3.四大拒绝策略