1. 程式人生 > >.Net 多線程 (1) Task

.Net 多線程 (1) Task

var null data- color option ask dia eth 取消

多線程是一種有效提高程序工作效率的方法。當然為了效率需要使用更多的cpu,內存等資源。

技術分享圖片

並發是兩個隊列交替使用一臺咖啡機,並行是兩個隊列同時使用兩臺咖啡機,如果串行,一個隊列使用一臺咖啡機,那麽哪怕前面那個人便秘了去廁所呆半天,後面的人也只能死等著他回來才能去接咖啡,這效率無疑是最低的。

並發和並行都可以是很多個線程,就看這些線程能不能同時被(多個)cpu執行,如果可以就說明是並行,而並發是多個線程被(一個)cpu 輪流切換著執行。

運行一個線程

 1  class Program
 2     {
 3         static void Main(string
[] args) 4 { 5 new Thread(Go).Start(); // .NET 1.0開始就有的 6 Task.Factory.StartNew(Go); // .NET 4.0 引入了 TPL 7 Task.Run(new Action(Go)); // .NET 4.5 新增了一個Run的方法 8 Console.WriteLine("我是Main線程 {0}", Thread.CurrentThread.ManagedThreadId.ToString());
9 var dayName = Task.Run<string>(() => { return GetDayOfThisWeek(); }); 10 Console.WriteLine("今天是:{0}", dayName.Result); 11 Console.ReadLine(); 12 13 } 14 public static void Go() 15 { 16 Console.WriteLine("
我是另一個線程 {0}", Thread.CurrentThread.ManagedThreadId.ToString()); 17 } 18 19 public static string GetDayOfThisWeek() 20 { 21 return string.Format("結果{0}", Thread.CurrentThread.ManagedThreadId.ToString()); 22 } 23 }

技術分享圖片

TaskFactory 類

  • 創建一個任務,並通過調用立即啟動該 StartNew 方法

任務等待

  • 創建一個任務,在數組中的任務之一通過調用完成後開始 ContinueWhenAny 方法。

  • 創建一個任務,在數組中的所有任務已都完成通過調用開始 ContinueWhenAll 方法。

技術分享圖片 AsyncState

獲取在創建 Task 時提供的狀態對象,如果未提供,則為 null。

技術分享圖片技術分享圖片 CompletedTask

獲取一個已成功完成的任務。

技術分享圖片 CreationOptions

獲取用於創建此任務的 TaskCreationOptions。

技術分享圖片技術分享圖片 CurrentId

返回當前正在執行 Task 的 ID。

技術分享圖片 Exception

獲取導致 AggregateException 提前結束的 Task。 如果 Task 成功完成或尚未引發任何異常,這將返回 null

技術分享圖片技術分享圖片 Factory

提供對用於創建 Task 和 Task<TResult> 的工廠方法的訪問。

技術分享圖片 Id

獲取此 Task 實例的 ID。

技術分享圖片 IsCanceled

獲取此 Task 實例是否由於被取消的原因而已完成執行。

技術分享圖片 IsCompleted

獲取此 Task 是否已完成。

技術分享圖片 IsFaulted

獲取 Task 是否由於未經處理異常的原因而完成。

技術分享圖片 Status

獲取此任務的 TaskStatus。

https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.task(v=vs.110).aspx

當然這裏並不考慮對共享數據的操作,多個線程在對同一數據源進行操作的時候,不控制順序可能會產生意想不到的後果。

.Net 多線程 (1) Task