最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何在C#中使用 CancellationToken 處理異步任務

 更新時間:2021年03月17日 08:37:46   作者:SpringLeee  
這篇文章主要介紹了如何在C#中使用 CancellationToken 處理異步任務,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下

在 .NET Core 中使用異步編程已經(jīng)很普遍了, 你在項目中隨處可見 async 和 await,它簡化了異步操作,允許開發(fā)人員,使用同步的方式編寫異步代碼,你會發(fā)現(xiàn)在大部分的異步方法中,都提供了CancellationToken參數(shù),本文主要介紹下 CancellationTokenSource 和 CancellationToken在異步任務中的使用。

手動取消任務

創(chuàng)建一個 CancellationTokenSource,然后調(diào)用異步方法時,傳入 CancellationToken,它是一個輕量級對象,可以通知請求是否已取消,我們可以手動調(diào)用 cts.Cancel() 來取消任務,為了方面演示,這里我有用到局部方法。

static async Task Main(string[] args)
{
  async Task Execute(CancellationToken token)
  {
  await Task.Delay(3000, token);
  Console.WriteLine("Executed");
  }

  CancellationTokenSource cts = new CancellationTokenSource(); 

  _ = Execute(cts.Token);

  // 手動取消任務
  cts.Cancel(); 

  Console.ReadKey();
}  

定時取消任務

創(chuàng)建 CancellationTokenSource 的時候,可以傳入時間(毫秒或者Timespan), 通過它我們可以在等待一段時間后,自動取消任務。

 CancellationTokenSource cts = new CancellationTokenSource(1000); 

_ = Execute(cts.Token); 

Console.ReadKey();

我們也可以調(diào)用 cts.CancelAfter(1000), 它會在1s后取消任務。

cts.CancelAfter(1000);

CancellationToken 注冊回調(diào)

我們可以調(diào)用 Register()方法,注冊Token取消的回調(diào),參數(shù)需要傳入 Action 委托。

 CancellationTokenSource cts = new CancellationTokenSource(1000);

cts.Token.Register(() => Console.WriteLine("任務已取消!"));

// 開始異步任務
_ = Execute(cts.Token);  

Console.ReadKey();

Register() 注冊回調(diào)后,返回一個 CancellationTokenRegistration 對象,同樣的,你可以在回調(diào)函數(shù)執(zhí)行前,移除注冊回調(diào),就像這樣:

cts.Token.Register(() => Console.WriteLine("任務已取消!")).Unregister();

在 HttpClient 中使用

同樣,你可以在 HttpClient 中使用傳入 CancellationToken (或者使用HttpClient的Timeout屬性),超時后,它會拋出一個 TaskCanceledException 的異常:

 CancellationTokenSource cts = new CancellationTokenSource(10); 

_ = await new HttpClient().GetAsync("https://www.youtube.com/",cts.Token);

Console.ReadKey();

在 WebAPI中使用

我創(chuàng)建了一個 WebAPI 項目,其中的控制器代碼如下,等待了5s,然后進行輸出信息。

 [HttpGet]
public async Task<IActionResult> Index()
{
 await Task.Delay(5000);
 Console.WriteLine("Executed");
 return Ok();
}

啟動項目后,我們在瀏覽器頁面上訪問接口,在第一次訪問接口等待響應時,我刷新一次了頁面,現(xiàn)在程序的輸出信息如下:

說明前臺頁面刷新后,后臺并沒有做取消操作,執(zhí)行了兩次!

我們可以把程序改成這樣,傳入 CancellationToken

[HttpGet]
public async Task<IActionResult> Index(CancellationToken token)
{
 await Task.Delay(5000,token);
 Console.WriteLine("Executed");
 return Ok();
}

現(xiàn)在在瀏覽器訪問頁面,同樣的,第一次還未返回是,我們刷新一次頁面,程序輸出如下:

只有一次輸出,第一次請求拋出了一次 TaskCanceledException 異常,沒有繼續(xù)執(zhí)行后邊的邏輯,當然你可以捕獲這個異常,返回更友好的提示!

以上就是如何在C#中使用 CancellationToken 處理異步任務的詳細內(nèi)容,更多關于C# 用CancellationToken 處理異步任務的資料請關注腳本之家其它相關文章!

相關文章

  • C#?獲取本機IP地址(IPv4和IPv6)

    C#?獲取本機IP地址(IPv4和IPv6)

    本文主要介紹了C#?獲取本機IP地址(IPv4和IPv6),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 全面分析c# LINQ

    全面分析c# LINQ

    這篇文章主要介紹了c# LINQ的相關資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-08-08
  • C#云存儲服務的訪問控制與權(quán)限管理的全面指南

    C#云存儲服務的訪問控制與權(quán)限管理的全面指南

    在云計算時代,云存儲服務的訪問控制與權(quán)限管理是保障數(shù)據(jù)安全的基石,無論是AWS S3、Azure Blob Storage還是阿里云OSS,權(quán)限配置不當可能導致數(shù)據(jù)泄露、未授權(quán)訪問甚至惡意攻擊,本文給大家介紹了C#云存儲服務的訪問控制與權(quán)限管理的全面指南,需要的朋友可以參考下
    2025-08-08
  • WinForm實現(xiàn)關閉按鈕不可用或隱藏的方法

    WinForm實現(xiàn)關閉按鈕不可用或隱藏的方法

    這篇文章主要介紹了WinForm實現(xiàn)關閉按鈕不可用或隱藏的方法,很實用的功能,需要的朋友可以參考下
    2014-08-08
  • C#溫故而知新系列教程之閉包

    C#溫故而知新系列教程之閉包

    閉包是將一些執(zhí)行語句的封裝,可以將封裝的結(jié)果像對象一樣傳遞,在傳遞時,這個封裝依然能夠訪問到原上下文。下面這篇文章主要給大家介紹了關于C#中閉包的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • C#微信開發(fā)之微信公眾號標簽管理功能

    C#微信開發(fā)之微信公眾號標簽管理功能

    這篇文章主要介紹了C#微信開發(fā)之微信公眾號標簽管理功能 的相關資料,需要的朋友可以參考下
    2016-05-05
  • 深入反射生成數(shù)組的詳解

    深入反射生成數(shù)組的詳解

    本篇文章是對反射生成數(shù)組進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法

    C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#基于SQLiteHelper類似SqlHelper類實現(xiàn)存取Sqlite數(shù)據(jù)庫的方法,涉及C#操作SQLite數(shù)據(jù)庫的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#使用Spire.Doc解決Word轉(zhuǎn)PDF亂碼/錯位的方案

    C#使用Spire.Doc解決Word轉(zhuǎn)PDF亂碼/錯位的方案

    在日常開發(fā)中,Word轉(zhuǎn)PDF的功能需求十分常見,但實現(xiàn)過程中往往會遇到一些棘手的挑戰(zhàn),無論是系統(tǒng)自動生成的報告,還是用戶上傳的文檔,轉(zhuǎn)換后出現(xiàn)亂碼、排版錯位等問題,所以本文給大家介紹了如何使用Spire.Doc完美解決Word轉(zhuǎn)PDF亂碼/錯位問題,需要的朋友可以參考下
    2025-09-09
  • C#查找字符串所有排列組合的方法

    C#查找字符串所有排列組合的方法

    這篇文章主要介紹了C#查找字符串所有排列組合的方法,涉及C#字符串操作的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04

最新評論

山西省| 辽阳县| 成都市| 东方市| 孟连| 建阳市| 河源市| 麻江县| 海兴县| 镶黄旗| 南昌县| 清丰县| 江陵县| 莱西市| 连江县| 宝应县| 青田县| 青冈县| 呼伦贝尔市| 五峰| 花垣县| 海丰县| 泗阳县| 江北区| 禹城市| 营口市| 兴宁市| 抚远县| 尖扎县| 桃江县| 白银市| 岑溪市| 铜鼓县| 宁晋县| 德钦县| 金门县| 台山市| 华容县| 定结县| 昌图县| 松溪县|