精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

C# 異步編程與列表任務(wù)取消詳解

開發(fā) 前端
在實(shí)際開發(fā)中,我們經(jīng)常需要處理耗時(shí)的異步操作,比如網(wǎng)絡(luò)請(qǐng)求、文件讀寫等。有時(shí)候,我們可能需要取消這些正在進(jìn)行的異步操作。本文將詳細(xì)介紹如何在C#中實(shí)現(xiàn)異步操作的取消機(jī)制。

在實(shí)際開發(fā)中,我們經(jīng)常需要處理耗時(shí)的異步操作,比如網(wǎng)絡(luò)請(qǐng)求、文件讀寫等。有時(shí)候,我們可能需要取消這些正在進(jìn)行的異步操作。本文將詳細(xì)介紹如何在C#中實(shí)現(xiàn)異步操作的取消機(jī)制。

前置條件

  • .NET 5.0或更高版本
  • Visual Studio或Visual Studio Code
  • 基本的C#異步編程知識(shí)

核心概念

在開始之前,讓我們了解幾個(gè)重要的概念:

  1. CancellationTokenSource用于發(fā)出取消信號(hào)的源
  2. CancellationToken用于接收取消信號(hào)的令牌
  3. Task表示異步操作的對(duì)象

完整示例代碼

下面是一個(gè)完整的示例,展示如何實(shí)現(xiàn)可取消的異步操作:

using System.Diagnostics;

namespace AppCancellationToken
{
    internal class Program
    {
        // 創(chuàng)建取消令牌源
        static readonly CancellationTokenSource s_cts = new CancellationTokenSource();

        // 創(chuàng)建HttpClient實(shí)例
        static readonly HttpClient s_client = new HttpClient
        {
            MaxResponseContentBufferSize = 1_000_000
        };

        // 待下載的URL列表
        static readonly IEnumerable<string> s_urlList = newstring[]
        {
        "https://learn.microsoft.com",
        "https://learn.microsoft.com/dotnet",
        "https://learn.microsoft.com/azure",
        "https://learn.microsoft.com/visualstudio"
        };

        static async Task Main()
        {
            Console.WriteLine("程序啟動(dòng)...");
            Console.WriteLine("按回車鍵取消下載...\n");

            // 創(chuàng)建監(jiān)聽取消的任務(wù)
            Task cancelTask = Task.Run(() =>
            {
                while (Console.ReadKey().Key != ConsoleKey.Enter)
                {
                    Console.WriteLine("按回車鍵取消下載...");
                }
                Console.WriteLine("\n檢測到回車鍵:正在取消下載...\n");
                s_cts.Cancel();
            });

            // 創(chuàng)建下載任務(wù)
            Task sumPageSizesTask = SumPageSizesAsync();

            // 等待任意一個(gè)任務(wù)完成
            Task finishedTask = await Task.WhenAny(cancelTask, sumPageSizesTask);

            if (finishedTask == cancelTask)
            {
                try
                {
                    await sumPageSizesTask;
                    Console.WriteLine("在處理取消請(qǐng)求之前下載任務(wù)已完成。");
                }
                catch (OperationCanceledException)
                {
                    Console.WriteLine("下載任務(wù)已被取消。");
                }
            }

            Console.WriteLine("程序結(jié)束。");
        }

        static async Task SumPageSizesAsync()
        {
            var stopwatch = Stopwatch.StartNew();
            int total = 0;

            foreach (string url in s_urlList)
            {
                int contentLength = await ProcessUrlAsync(url, s_client, s_cts.Token);
                total += contentLength;
            }

            stopwatch.Stop();
            Console.WriteLine($"\n總計(jì)下載字節(jié)數(shù): {total:#,#}");
            Console.WriteLine($"耗時(shí): {stopwatch.Elapsed}\n");
        }

        static async Task<int> ProcessUrlAsync(string url, HttpClient client, CancellationToken token)
        {
            HttpResponseMessage response = await client.GetAsync(url, token);
            byte[] content = await response.Content.ReadAsByteArrayAsync(token);
            Console.WriteLine($"{url,-60} {content.Length,10:#,#}");
            return content.Length;
        }
    }
}

代碼詳解

初始化設(shè)置 

static readonly CancellationTokenSource s_cts = new CancellationTokenSource();
static readonly HttpClient s_client = new HttpClient { MaxResponseContentBufferSize = 1_000_000 };
  • 創(chuàng)建CancellationTokenSource實(shí)例用于發(fā)出取消信號(hào)
  • 創(chuàng)建HttpClient實(shí)例用于發(fā)送HTTP請(qǐng)求
  • 使用static readonly確保這些實(shí)例在整個(gè)應(yīng)用程序生命周期內(nèi)只創(chuàng)建一次

主方法實(shí)現(xiàn) 

主方法使用async Task Main()實(shí)現(xiàn)異步入口點(diǎn),包含兩個(gè)主要任務(wù):

  1. 取消監(jiān)聽任務(wù)(cancelTask)
  2. 下載處理任務(wù)(sumPageSizesTask)

異步下載實(shí)現(xiàn) 

ProcessUrlAsync方法實(shí)現(xiàn)了單個(gè)URL的下載邏輯:

static async Task<int> ProcessUrlAsync(string url, HttpClient client, CancellationToken token)
{
    HttpResponseMessage response = await client.GetAsync(url, token);
    byte[] content = await response.Content.ReadAsByteArrayAsync(token);
    Console.WriteLine($"{url,-60} {content.Length,10:#,#}");
    return content.Length;
}
  • 使用GetAsync方法發(fā)送HTTP請(qǐng)求
  • 傳入CancellationToken支持取消操作
  • 返回下載內(nèi)容的字節(jié)數(shù)

運(yùn)行效果

程序運(yùn)行后會(huì)顯示如下輸出:

圖片圖片

注意

  1. 始終使用using語句或字段初始化方式創(chuàng)建CancellationTokenSource
  2. 在所有可取消的異步操作中傳遞CancellationToken
  3. 正確處理取消異常
  4. 使用static readonly創(chuàng)建長期使用的HTTP客戶端實(shí)例

總結(jié)

這種模式適用于需要支持用戶取消的長時(shí)間運(yùn)行的異步操作,如網(wǎng)絡(luò)請(qǐng)求、文件下載等場景。

責(zé)任編輯:武曉燕 來源: 技術(shù)老小子
相關(guān)推薦

2015-09-16 15:11:58

C#異步編程

2021-10-12 17:47:22

C# TAP異步

2009-08-20 17:30:56

C#異步編程模式

2010-12-22 10:21:17

C#基礎(chǔ)

2009-08-21 10:13:02

C#異步初步

2024-03-04 18:49:59

反射C#開發(fā)

2009-08-25 17:13:57

C#串口編程

2024-04-09 08:04:42

C#結(jié)構(gòu)await

2012-07-27 10:02:39

C#

2009-04-10 09:55:44

C#反射.NET

2009-08-20 16:33:44

Socket異步通訊

2024-12-23 09:09:54

2009-08-25 10:44:08

C#接口定義接口

2009-08-25 10:57:09

C#接口

2016-12-14 15:05:08

C#異步編程

2009-08-20 17:47:54

C#異步編程模式

2024-10-15 08:29:09

C#軟件開發(fā)

2016-09-07 20:43:36

Javascript異步編程

2009-08-07 16:19:00

C#下數(shù)據(jù)庫編程

2009-08-24 18:22:05

C# 泛型編程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲影视资源| 国产激情小视频在线| 午夜一区二区三区不卡视频| 在线精品视频视频中文字幕| 欧美又黄又嫩大片a级| 色呦呦在线资源| 97国产一区二区| 91精品久久久久久综合乱菊| 国产午夜免费视频| 成人女性视频| 亚洲福利在线视频| 伊人影院综合在线| 人狥杂交一区欧美二区| 亚洲图片欧美激情| 欧美日韩电影一区二区| 国产视频在线一区| 巨乳诱惑日韩免费av| 欧美尺度大的性做爰视频| 内射中出日韩无国产剧情| 四虎国产精品免费久久5151| 一区二区国产视频| 日韩av电影免费观看| 亚洲老妇色熟女老太| 美女视频一区在线观看| 57pao精品| 激情小说中文字幕| 欧美亚洲在线日韩| 精品亚洲一区二区三区四区五区| 在线观看日本www| 91精品影视| 亚洲午夜在线电影| 中文视频一区视频二区视频三区| 免费在线视频你懂得| 成人激情视频网站| 91手机视频在线观看| 中文字幕av第一页| 亚洲欧美日本视频在线观看| 久久久久成人精品| 国产又粗又硬又长又爽| 亚洲高清极品| 亚洲精品福利在线观看| 欧美熟妇精品一区二区| 亚洲图片小说区| 欧美自拍偷拍一区| 哪个网站能看毛片| 免费v片在线观看| 亚洲综合自拍偷拍| 欧美三级午夜理伦三级老人| 69久久精品| 国产亚洲精品久| 欧美性大战久久久久| 婷婷伊人综合中文字幕| 成人福利视频网站| 国产精品theporn88| 国产精品一区二区黑人巨大 | 亚洲视频在线观看视频| 亚洲av成人精品一区二区三区 | 久久久一本精品99久久精品66| 亚洲国产剧情在线观看| 国产成人在线电影| 97免费资源站| 精品久久国产视频| 国产精品77777| 亚洲一区二区自拍| www.欧美国产| 国产宾馆实践打屁股91| 古典武侠综合av第一页| 黄色aaa毛片| 白白色 亚洲乱淫| 久久久综合亚洲91久久98| 亚洲av成人无码网天堂| 久久久久久久久免费| 日本电影一区二区三区| a中文在线播放| 国产精品不卡一区二区三区| 少妇熟女一区二区| 午夜伦理在线视频| 亚洲444eee在线观看| 浮妇高潮喷白浆视频| 成人动漫一区| 欧美亚一区二区| 日日干日日操日日射| 久久99成人| 日韩av最新在线| 少妇无套高潮一二三区| 久久精品播放| 欧美日韩成人在线播放| 免费看日韩毛片| 日本网站在线观看一区二区三区| 成人美女免费网站视频| 亚洲精品久久久久久无码色欲四季| 成人av电影在线观看| 久久综合久久久| 在线观看美女网站大全免费| 一区二区三区四区亚洲| 亚洲精品无码久久久久久| 日韩毛片免费视频一级特黄| 精品乱人伦一区二区三区| 女~淫辱の触手3d动漫| 91欧美大片| 97超碰蝌蚪网人人做人人爽 | 蜜桃av一区二区三区| 91高跟黑色丝袜呻吟在线观看| 人妻va精品va欧美va| 国产午夜精品福利| 国产高清www| 亚洲爱爱视频| 亚洲精品一区二区三区在线观看| 无码 人妻 在线 视频| 欧美在线91| 日韩av黄色在线观看| 国产视频aaa| 国产午夜精品一区二区三区视频| 黄黄视频在线观看| 色豆豆成人网| 亚洲国产成人91精品| 午夜成人亚洲理伦片在线观看| 99精品国产在热久久婷婷| 国产欧美日韩中文字幕| 视频在线观看你懂的| 亚洲精品免费视频| 精品亚洲一区二区三区四区| 欧美大奶一区二区| 超碰精品一区二区三区乱码| 精品久久久久久久久久久久久久久久久久| 国产福利一区二区三区视频在线| 五月天亚洲综合| 免费在线小视频| 日韩你懂的在线播放| 国产精品麻豆一区| 久久美女性网| 激情一区二区三区| 日本无删减在线| 制服视频三区第一页精品| 精品无码在线观看| 亚洲精品日韩久久| 国产精品亚洲综合| 国产精品69xx| 日韩三级中文字幕| 五月天激情丁香| 免费在线观看日韩欧美| 区一区二区三区中文字幕| 国精一区二区三区| 欧美一区二区三区的| 国产极品美女在线| 久久99精品久久久久婷婷| 日韩欧美一区二区三区久久婷婷| 精品91久久| 亚洲男女性事视频| 在线观看日韩中文字幕| a在线播放不卡| 九一国产精品视频| 国产精品xxx在线观看| 欧美激情中文字幕在线| 亚洲国产av一区二区| 亚洲一区在线观看视频| 亚洲少妇一区二区| 国内在线观看一区二区三区| 国产精品福利视频| h片在线观看下载| 亚洲国产成人精品久久久国产成人一区| 欧美爱爱小视频| 国产成人精品aa毛片| 欧美中文字幕在线观看视频| 91综合精品国产丝袜长腿久久| 欧美国产日本在线| 蜜桃av中文字幕| 欧美午夜精品伦理| 欧美 日韩 国产 成人 在线观看 | 日本伊人精品一区二区三区介绍| 外国精品视频在线观看 | 欧美系列电影免费观看 | 一卡二卡三卡在线| 亚洲卡通欧美制服中文| 激情av中文字幕| 国产日韩欧美| 婷婷五月色综合| 国产日韩在线观看视频| 欧美高清自拍一区| 亚洲色图 校园春色| 在线影院国内精品| 免费国产羞羞网站美图| 成人福利在线看| 国产av人人夜夜澡人人爽| 日韩欧美二区| 岛国一区二区三区高清视频| 三妻四妾完整版在线观看电视剧 | 7777精品久久久大香线蕉| 久久久久亚洲AV| 26uuu精品一区二区在线观看| 美女网站视频黄色| 欧美成人tv| 日本一区二区精品| 日韩精品亚洲专区在线观看| 51视频国产精品一区二区| 午夜不卡视频| 亚洲成人国产精品| 中文字幕一二区| 亚洲一区在线播放| 国产视频不卡在线| 成人黄色综合网站| 在线观看岛国av| 在线成人国产| 亚洲五月六月| 日本天堂一区| 成人在线免费观看视视频| 2021中文字幕在线| 日韩一区二区三区xxxx| 午夜激情在线视频| 91麻豆精品国产综合久久久久久| 亚洲第一精品在线观看| 亚洲乱码一区二区三区在线观看| 欧美 日本 国产| 国产风韵犹存在线视精品| 欧美精品成人网| 亚洲国产一区二区精品专区| 亚洲巨乳在线观看| 性欧美lx╳lx╳| 北条麻妃高清一区| 精品美女一区| 日产日韩在线亚洲欧美| 爱看av在线| 欧美理论片在线观看| 爱爱爱免费视频在线观看| 亚洲精品国产suv| 亚洲国产精品二区| 911精品国产一区二区在线| 亚洲婷婷综合网| 性做久久久久久免费观看| 国产少妇在线观看| 国产精品色噜噜| a级片在线观看| 97国产一区二区| av黄色一级片| 成人中文字幕在线| 欧美xxxx日本和非洲| 国产一区二区三区国产| 欧美特级aaa| 奇米影视一区二区三区小说| www黄色av| 亚洲一区二区伦理| 国精产品一区一区三区视频| 欧美理论在线| 亚洲精品国产suv一区88| 亚洲精品一二三区区别| 波多野结衣三级在线| 日韩情爱电影在线观看| 亚洲国产精品视频一区| 日韩欧美一区二区三区在线视频| 日本一区二区三区视频在线播放| 亚洲动漫在线观看| 欧美精品一区在线发布| 思热99re视热频这里只精品| 精品国产乱码久久久久| 久久精品凹凸全集| 久久99精品久久久久久三级 | 亚洲精品人成| 日韩精品永久网址| 在线一区高清| 一区二区电影在线观看| 日韩视频一二三| 在线成人h网| 精品中文字幕av| 久久精品一区| av网站在线不卡| 韩国理伦片一区二区三区在线播放| 在线视频观看91| 国产精品小仙女| 亚洲成人精品在线播放| a在线播放不卡| av女人的天堂| 亚洲欧美在线观看| 久久久久久久久久久久久久免费看 | 国产精品系列在线播放| 性xxxxxxxxx| 成人aa视频在线观看| 无遮挡aaaaa大片免费看| 国产欧美综合在线| 69夜色精品国产69乱| 洋洋av久久久久久久一区| 欧美啪啪小视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 中文字幕网址在线| 精品999在线播放| 黄色av免费在线观看| 视频一区视频二区国产精品| 伊人影院在线视频| 51色欧美片视频在线观看| 国产国产一区| av资源站久久亚洲| 女人抽搐喷水高潮国产精品| 三区精品视频观看| 欧美啪啪一区| 男人舔女人下面高潮视频| 国产自产视频一区二区三区| 毛茸茸free性熟hd| 欧美国产激情一区二区三区蜜月| 唐朝av高清盛宴| 色丁香久综合在线久综合在线观看| 91精品国产综合久| 日韩av中文字幕在线播放| 色影院视频在线| 91精品国产高清| av在线精品| 欧美日韩一区二区三区在线视频 | 99精品中文字幕在线不卡| 日韩精品伦理第一区| 黄色在线成人| 青青草久久伊人| 国产日本一区二区| 精品一区在线观看视频| 欧美性生交大片免网| 亚洲福利在线观看视频| 中文字幕亚洲欧美在线 | 欧美日本一区二区视频在线观看| 国产黄色特级片| 不卡的av在线| 青青操视频在线播放| 欧美日韩精品福利| 头脑特工队2在线播放| 欧美激情第三页| a一区二区三区亚洲| 手机成人在线| 久久电影一区| 免费黄色三级网站| 亚洲一区在线电影| 99久久精品免费看国产交换| 正在播放欧美一区| 天天综合网站| 久久人人九九| 在线亚洲观看| 人妻 日韩 欧美 综合 制服| 综合婷婷亚洲小说| 中国女人一级一次看片| 亚洲午夜性刺激影院| 中文字幕在线视频久| 韩国一区二区三区美女美女秀| 中文无码久久精品| 亚洲精品成人在线播放| 中文子幕无线码一区tr| 精品一区二区无码| 亚洲人成电影网站色…| 刘亦菲一区二区三区免费看| 久久国产精品久久| 国产日韩欧美高清免费| 制服丝袜第一页在线观看| 图片区小说区国产精品视频| 少妇喷水在线观看| 97在线看福利| 日韩激情啪啪| 国产日韩一区二区在线观看| 久久久久久免费毛片精品| 无码人妻丰满熟妇精品区| 亚洲色图五月天| 亚洲精品.com| 亚洲精品成人三区| 久久99精品久久久久久| 精品无码一区二区三区蜜臀| 91精品国产综合久久精品麻豆| а√天堂官网中文在线| 91久久伊人青青碰碰婷婷| 欧美深夜福利| 国产精品入口麻豆| 欧美香蕉大胸在线视频观看 | 国产主播性色av福利精品一区| 日韩a级在线观看| 91麻豆精品在线观看| 无码人妻一区二区三区线| 在线电影av不卡网址| 久久亚洲精品人成综合网| 中国 免费 av| 成人97人人超碰人人99| 亚洲天堂一区在线| 在线成人中文字幕| 亚洲精品观看| 国产福利视频在线播放| 国产精品美女久久久久久久| 国产三级视频在线播放| 性欧美xxxx交| 不卡在线一区| av在线天堂网| 日韩人在线观看| 91xxx在线观看| 91精品网站| 麻豆成人精品| 国产天堂av在线| 国产丝袜一区二区三区免费视频| 91亚洲视频| 你真棒插曲来救救我在线观看| 国产蜜臀av在线一区二区三区| 精品二区在线观看| 日本午夜精品理论片a级appf发布| 99热精品久久| 黄色正能量网站| 日韩一区二区三区电影 | 欧美在线视频日韩| 福利在线导航136| 亚洲一区二区高清视频| 99视频一区二区| 国内老熟妇对白xxxxhd|