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

C#中的Task.WaitAll和Task.WaitAny方法介紹

 更新時(shí)間:2022年04月21日 09:08:55   作者:農(nóng)碼一生  
這篇文章介紹了C#中的Task.WaitAll和Task.WaitAny方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、簡介

Task.WaitAll:等待所有提供的 Task 對象完成執(zhí)行過程。

Task.WaitAny:等待提供的任一 Task 對象完成執(zhí)行過程。

二、代碼案例

Task.WaitAll

代碼:

    class Program
    {
        public class DownLoadTest
        {
            Stopwatch watch = new Stopwatch();
            public  DownLoadTest()
            {
                watch.Start();
            }
                
            public async Task DoRunTaskAsync(string url, CancellationToken ct)
            {
                if (ct.IsCancellationRequested)
                {
                    Console.WriteLine(string.Format("取消{0}的運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                    return;
                }
                Console.WriteLine(string.Format("下載{0}開始運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                WebClient wc = new WebClient();
                await Task.Run(() =>
                {
                    var task = wc.DownloadStringTaskAsync(url);
                    while (!task.IsCompleted)
                    {
                        if (ct.IsCancellationRequested)
                        {
                            Console.WriteLine(string.Format("取消{0}的運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                            return;
                        }
                    }
                    if (task.IsCompleted)
                        Console.WriteLine(string.Format("下載{0}運(yùn)行結(jié)束 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                });
            }
        }

        static void Main(string[] args)
        {

            DownLoadTest dwtest = new DownLoadTest();
            CancellationTokenSource cts = new CancellationTokenSource();
            CancellationToken token = cts.Token;
            var task1 = dwtest.DoRunTaskAsync("https://www.baidu.com/", token);
            var task2 = dwtest.DoRunTaskAsync("https://www.taobao.com/", token);
            var task3 = dwtest.DoRunTaskAsync("https://www.cnblogs.com/", token);
            Task[] tasks = new Task[] { task1, task2, task3 };
            Console.WriteLine("task.Result等待結(jié)果打印");
            Task.WaitAll(tasks, 10000);
            cts.Cancel();//超過10s時(shí)間取消運(yùn)行
            Console.WriteLine(task1.Status);
            Console.WriteLine(task2.Status);
            Console.WriteLine(task3.Status);
            Console.WriteLine(string.Format("主線程運(yùn)行結(jié)束"));
            Console.ReadKey();
        }
    }

運(yùn)行結(jié)果:

通過運(yùn)行結(jié)果可以看出,可以看到Task.WaitAll(tasks)在等待超時(shí)的時(shí)間內(nèi),同步等待了所有的任務(wù)完成。

Task.WaitAny

代碼:

    class Program
    {
        public class DownLoadTest
        {
            Stopwatch watch = new Stopwatch();
            public  DownLoadTest()
            {
                watch.Start();
            }
                
            public async Task DoRunTaskAsync(string url, CancellationToken ct)
            {
                if (ct.IsCancellationRequested)
                {
                    Console.WriteLine(string.Format("取消{0}的運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                    return;
                }
                Console.WriteLine(string.Format("下載{0}開始運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                WebClient wc = new WebClient();
                await Task.Run(() =>
                {
                    var task = wc.DownloadStringTaskAsync(url);
                    while (!task.IsCompleted)
                    {
                        if (ct.IsCancellationRequested)
                        {
                            Console.WriteLine(string.Format("取消{0}的運(yùn)行 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                            return;
                        }
                    }
                    if (task.IsCompleted)
                        Console.WriteLine(string.Format("下載{0}運(yùn)行結(jié)束 :{1,4:N0}ms", url, watch.Elapsed.TotalMilliseconds));
                });
            }
        }

        static void Main(string[] args)
        {

            DownLoadTest dwtest = new DownLoadTest();
            CancellationTokenSource cts = new CancellationTokenSource();
            CancellationToken token = cts.Token;
            var task1 = dwtest.DoRunTaskAsync("https://www.baidu.com/", token);
            var task2 = dwtest.DoRunTaskAsync("https://www.taobao.com/", token);
            var task3 = dwtest.DoRunTaskAsync("https://www.cnblogs.com/", token);
            Task[] tasks = new Task[] { task1, task2, task3 };
            Console.WriteLine("task.Result等待結(jié)果打印");
            Task.WaitAny(tasks, 4000);
            cts.Cancel();//超過4s時(shí)間取消運(yùn)行
            Console.WriteLine(task1.Status);
            Console.WriteLine(task2.Status);
            Console.WriteLine(task3.Status);
            Console.WriteLine(string.Format("主線程運(yùn)行結(jié)束"));
            Console.ReadKey();
        }
    }

運(yùn)行結(jié)果:

通過運(yùn)行結(jié)果截圖可以看出,可以看到,Task.WhenAny(tasks)至少等待了一個(gè)任務(wù)的完成。這里https://www.baidu.com/先下載完,就直接終止等待 。

三、總結(jié)

Task.WaitAll阻止當(dāng)前線程,直到所有其他任務(wù)完成執(zhí)行為止。Task.WaitAny阻止當(dāng)前線程,至少等待一個(gè)任務(wù)完成執(zhí)行為止。如果等待時(shí)長設(shè)置較長,上述案例結(jié)果會(huì)一樣。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Unity3D Shader實(shí)現(xiàn)流光效果

    Unity3D Shader實(shí)現(xiàn)流光效果

    這篇文章主要為大家詳細(xì)介紹了Unity3D Shader實(shí)現(xiàn)流光效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#實(shí)現(xiàn)ArrayList動(dòng)態(tài)數(shù)組的示例

    C#實(shí)現(xiàn)ArrayList動(dòng)態(tài)數(shù)組的示例

    ArrayList是一個(gè)動(dòng)態(tài)數(shù)組,可以用來存儲(chǔ)任意類型的元素,本文就來介紹一下C#實(shí)現(xiàn)ArrayList動(dòng)態(tài)數(shù)組的示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Unity延時(shí)執(zhí)行的多種方法小結(jié)

    Unity延時(shí)執(zhí)行的多種方法小結(jié)

    本文主要介紹了4種延時(shí)執(zhí)行的方法,主要包括Update計(jì)時(shí)器,Invoke,協(xié)程,DoTween,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#預(yù)處理器指令的用法實(shí)例分析

    C#預(yù)處理器指令的用法實(shí)例分析

    這篇文章主要介紹了C#預(yù)處理器指令的用法,以實(shí)例形式較為詳細(xì)的分析了預(yù)處理器指令的原理與相應(yīng)的用法,有助于深入理解C#程序的運(yùn)行原理,需要的朋友可以參考下
    2014-11-11
  • C#?連接本地?cái)?shù)據(jù)庫的實(shí)現(xiàn)示例

    C#?連接本地?cái)?shù)據(jù)庫的實(shí)現(xiàn)示例

    本文主要介紹了C#?連接本地?cái)?shù)據(jù)庫的實(shí)現(xiàn)示例,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • WPF實(shí)現(xiàn)繪制餅狀統(tǒng)計(jì)圖的示例代碼

    WPF實(shí)現(xiàn)繪制餅狀統(tǒng)計(jì)圖的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何使用WPF實(shí)現(xiàn)繪制簡單的餅狀統(tǒng)計(jì)圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • C# Bitmap圖像處理(含增強(qiáng)對比度的三種方法)

    C# Bitmap圖像處理(含增強(qiáng)對比度的三種方法)

    本文主要介紹了C# Bitmap圖像處理(含增強(qiáng)對比度的三種方法),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例

    Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例

    這篇文章主要介紹了Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口的方法,以實(shí)例的形式講述了數(shù)據(jù)接口及反射辨別響應(yīng)的實(shí)現(xiàn)方法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    這篇文章主要為大家介紹了Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • C#?微信支付回調(diào)驗(yàn)簽處理的實(shí)現(xiàn)

    C#?微信支付回調(diào)驗(yàn)簽處理的實(shí)現(xiàn)

    在微信支付中,當(dāng)用戶支付成功后,微信會(huì)把相關(guān)支付結(jié)果和用戶信息發(fā)送給商戶,本文就詳細(xì)的介紹了C#?微信支付回調(diào)驗(yàn)簽處理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-12-12

最新評論

兴山县| 墨脱县| 琼结县| 遂溪县| 琼海市| 科技| 金湖县| 昌吉市| 四子王旗| 依安县| 石阡县| 南丰县| 凤阳县| 资源县| 驻马店市| 宜兰市| 竹山县| 铁力市| 威远县| 沙雅县| 平江县| 封开县| 车险| 收藏| 剑河县| 江北区| 奈曼旗| 惠州市| 电白县| 尉氏县| 全州县| 夏邑县| 永昌县| 平邑县| 汉源县| 南皮县| 和林格尔县| 浦城县| 浏阳市| 开平市| 贡嘎县|