C#並行編程-Task

來源:互聯網
上載者:User

標籤:相關   lan   並且   strong   title   集合   www.   aggregate   ons   

菜鳥學習並行編程,參考《C#並行編程進階教程.PDF》,如有錯誤,歡迎指正。

網址:https://www.cnblogs.com/woxpp/p/3928788.html

 

目錄
  • C#並行編程-相關概念

  • C#並行編程-Parallel

  • C#並行編程-Task

  • C#並行編程-並發集合

  • C#並行編程-線程同步原語

  • C#並行編程-PLINQ:聲明式資料並行

 

任務簡介

TPL引入新的基於任務的編程模型,通過這種編程模型可以發揮多核的功效,提升應用程式的效能,不需要編寫底層複雜且重量級的線程代碼。

但需要注意:任務並不是線程(任務啟動並執行時候需要使用線程,但並不是說任務取代了線程,任務代碼是使用底層的線程(軟體線程,調度在特定的硬體執行緒或邏輯核心上)啟動並執行,任務與線程之間並沒有一對一的關係。)

建立一個新的任務時,調度器(調度器依賴於底層的線程池引擎)會使用工作竊取隊列找到一個最合適的線程,然後將任務排入佇列,任務所包含的代碼會在一個線程中運行。

 

System.Threading.Tasks.Task

一個Task表示一個非同步作業,Task提供了很多方法和屬性,通過這些方法和屬效能夠對Task的執行進行控制,並且能夠獲得其狀態資訊。

Task的建立和執行都是獨立的,因此可以對關聯操作的執行擁有完全的控制權。

使用Parallel.For、Parallel.ForEach的迴圈迭代的並存執行,TPL會在後台建立System.Threading.Tasks.Task的執行個體。

使用Parallel.Invoke時,TPL也會建立與調用的委託數目一致的System.Threading.Tasks.Task的執行個體。

 

注意項

程式中添加很多非同步操作作為Task執行個體載入的時候,為了充分利用運行時所有可用的邏輯核心,任務調度器會嘗試的並行的運行這些任務,也會嘗試在所有的可用核心上對工作進行負載平衡。

但在實際的編碼過程當中,並不是所有的程式碼片段都能夠方便的用任務來運行,因為任務會帶來額外的開銷,儘管這種開銷比添加線程所帶來的開銷要小,但是仍然需要將這個開銷考慮在內。

Task狀態與生命週期

一個Task執行個體只會完成其生命週期一次,當Task到達它的3種肯呢過的最終狀態之一是,就無法回到之前的任何狀態

下面貼代碼,詳解見注釋,方便大家理解Task的狀態:

 View Code

 

使用任務來對代碼進行並行化

使用Parallel.Invoke可以並行載入多個方法,使用Task執行個體也能完成同樣的工作,下面貼代碼:

 View Code

等待任務完成Task.WaitAll
Task.WaitAll 方法,這個方法是同步執行的,在Task作為參數被接受,所有Task結束其執行前,主線程不會繼續執行下一條指令,下面貼代碼

 View Code

Task.WaitAll 限定等待時間長度

 View Code

10毫秒沒有完成任務,則輸出了****

通過取消標幟取消任務

通過取消標幟來中斷Task執行個體的執行。 CancellationTokenSource,CancellationToken下的IsCanceled屬性標誌當前是否已經被取消,取消任務,任務也不一定會馬上取消,下面貼代碼:

 View Code

Task異常處理 當很多任務並行啟動並執行時候,可能會並行發生很多異常。Task執行個體能夠處理一組一組的異常,這些異常有System.AggregateException類處理

 View Code

Task傳回值  Task<TResult>

 View Code

通過延續串聯多個任務

ContinueWith:建立一個目標Task完成時,非同步執行的延續程式,await,如代碼所示:

 View Code

TaskContinuationOptions

TaskContinuationOptions參數,可以控制延續另一個任的任務調度和執行的可選行為。下面看代碼:

 View Code

TaskContinuationOptions 屬性有很多,如下所示

C#並行編程-Task

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.