1. 程式人生 > 其它 >C# Task詳解(學習)

C# Task詳解(學習)

原文地址:C# Task詳解 - 五維思考 - 部落格園 (cnblogs.com)

1. Task 的優勢

  ThreadPool 相對於 Thread 具備許多優勢,但 ThreadPool 卻又存在一些使用上的不方便。

  比如:

    ThreadPool 不支援執行緒的取消、完成、失敗通知等互動性操作。

    ThreadPool 不支援執行緒執行的先後次序。

  以前,開發者要實現上述功能,需要完成很多額外的工作,現在,FCL中提供了一個功能更強大的概念:Task。Task 線上程池的基礎上進行了優化,並提供了更多的API。在FCL4.0中,編寫多執行緒程式,Task顯然已經優於傳統的方式。

  簡單的Demo:

  

 1 using System;
 2 using System.Threading;
 3 using System.Threading.Tasks;
 4 
 5 namespace TaskDemo
 6 {
 7     class Program
 8     {
 9         static void Main(string[] args)
10         {
11             Task t = new Task(() =>
12             {
13                 Console.WriteLine($"
{DateTime.Now} 任務開始工作..."); 14 // 模擬工作過程 15 Thread.Sleep(5000); 16 }); 17 t.Start(); 18 t.ContinueWith((task) => 19 { 20 Console.WriteLine($"{DateTime.Now} 任務完成,完成時的狀態:"); 21 Console.WriteLine("
IsCanceled={0}\tIsCompleted={1}\tIsFaulted={2}", task.IsCanceled, task.IsCompleted, task.IsFaulted); 22 }); 23 Console.ReadKey(); 24 } 25 } 26 }

2. Task 用法

2.1 建立任務

2.1.1 無返回值的方式

方式1: