天天看點

《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項

本節書摘來自華章出版社《c#多線程程式設計實戰(原書第2版)》一書中的第3章,第3.5節,作者(美)易格恩·阿格佛溫(eugene agafonov),黃博文 黃輝蘭 譯,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

本節将通過一個示例來展示如何線上程池中取消異步操作。

為了學習本節,你需要安裝visual studio 2015。除此之外無需其他準備。本節的源代碼放置在booksampleschapter3recipe4目錄中。

請執行以下步驟來了解如何線上程中實作一個取消選項:

1.啟動visual studio 2015。建立一個c#控制台應用程式項目。

2.在program.cs檔案中加入以下using指令:

《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項

3.在main方法下面加入以下代碼片段:

《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項
《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項

4.在main方法中加入以下代碼片段:

《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項
《C#多線程程式設計實戰(原書第2版)》——3.5 實作一個取消選項

5.運作程式。

本節中介紹了cancellationtokensource和cancellationtoken兩個新類。它們在.net4.0被引入,目前是實作異步操作的取消操作的事實标準。由于線程池已經存在了很長時間,并沒有特殊的api來實作取消标記功能,但是仍然可以對線程池使用上述api。

在本程式中使用了三種方式來實作取消過程。第一個是輪詢來檢查cancellationtoken.iscancellationrequested屬性。如果該屬性為true,則說明操作需要被取消,我們必須放棄該操作。

第二種方式是抛出一個operationcancelledexception異常。這允許在操作之外控制取消過程,即需要取消操作時,通過操作之外的代碼來處理。

最後一種方式是注冊一個回調函數。當操作被取消時,線上程池将調用該回調函數。這允許鍊式傳遞一個取消邏輯到另一個異步操作中。