日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

.Net中Task Parallel Library的進階用法

瀏覽:293日期:2022-06-08 15:40:40

在前一篇中,了解了Task的基本用法

如果一個方法返回Task,Task<T>,如何獲取Task的返回值,獲取值的過程會阻塞線程嗎?

static void Main(string[] args){    var result = DoWorkAsync().Result;    Console.WriteLine(result);    Console.WriteLine("我會什么時候顯示");    Console.ReadKey();}static Task<string> DoWorkAsync(){    return Task<string>.Factory.StartNew(() =>    {Thread.Sleep(3000);return "hello";    });}

可見,Task的Result屬性可以獲取返回值,而且,獲取返回值的過程線程是被阻塞的。

是否可以不阻塞線程,又能拿到某個線程的返回值呢?ContinueWith方法在某個線程結束之后進行,但同時不會阻塞線程。

static void Main(string[] args){    DoWorkAsync().ContinueWith((pre) =>    {Console.WriteLine(pre.Result);    });    Console.WriteLine("我會什么時候顯示");    Console.ReadKey();}

但ContinueWith總會在某個線程結束之后進行,是否可以對ContinueWith的過程控制一下呢?

static void Main(string[] args){    DoWorkAsync().ContinueWith((pre) =>    {Console.WriteLine(pre.Result);    }, TaskContinuationOptions.NotOnFaulted);    DoWorkAsync().ContinueWith((pre) =>    {Console.WriteLine(pre.Exception);    },TaskContinuationOptions.OnlyOnFaulted);    Console.WriteLine("我會什么時候顯示");    Console.ReadKey();}

以上,當沒有錯誤的時候就把返回值顯示出來,有錯誤就把錯誤信息顯示出來。

還可以通過Task的實例方法IsCompleted來判斷一個線程是否完成。

static void Main(string[] args){    var doWorkTask = DoWorkAsync();    if (doWorkTask.IsCompleted)    {Console.WriteLine(doWorkTask.Result);    }    else    {doWorkTask.ContinueWith((pre) =>{    Console.WriteLine(pre.Result);}, TaskContinuationOptions.NotOnFaulted);doWorkTask.ContinueWith((pre) =>{    Console.WriteLine(pre.Exception);}, TaskContinuationOptions.OnlyOnFaulted);    }        Console.WriteLine("我會什么時候顯示");    Console.ReadKey();}

Task的Status屬性,以及結合TaskStatus枚舉,可以判斷Task的狀態。

static void Main(string[] args){    var httpClient = new HttpClient();    Task<string> baiduTask = httpClient.GetStringAsync("http://www.baidu.com");    var httpClient2 = new HttpClient();    Task<string> sinaTask = httpClient2.GetStringAsync("http://www.sina.com.cn");    //等上面2個任務完成時這里再開始    Task<string[]> task = Task.WhenAll(baiduTask, sinaTask);    task.ContinueWith(stringArray =>    {//如果任務完成if (task.Status == TaskStatus.RanToCompletion){    for (int i = 0; i < stringArray.Result.Length;i++)    {Console.WriteLine(stringArray.Result[i].Substring(0,100));    }}else if (task.Status == TaskStatus.Canceled) //如果被取消{    Console.WriteLine("{0}這個任務被取消了",task.Id);}else //發生錯誤{    Console.WriteLine("發生錯誤了~~");    foreach (var item in task.Exception.InnerExceptions)    {Console.WriteLine(item.Message);    }}    });    Console.ReadKey();}

如果要控制Task的生命周期,可以考慮使用TaskCompletionSource<T>。

       static void Main(string[] args){    AsyncFactory.GetIntAsync().ContinueWith((prev) =>    {if (prev.Status == TaskStatus.RanToCompletion){    Console.WriteLine(prev.Result);}else if (prev.Status == TaskStatus.Canceled){    Console.WriteLine("任務被取消");}else{    Console.WriteLine("發生錯誤哦");    Console.WriteLine(prev.Exception);}    });    Console.ReadKey();}    }    public static class AsyncFactory    {public static Task<int> GetIntAsync(){    var tsc = new TaskCompletionSource<int>();    var timer = new System.Timers.Timer(2000);    timer.AutoReset = false;    timer.Elapsed += (s, e) =>    {tsc.SetResult(10);timer.Dispose();    };    timer.Start();    return tsc.Task;     }    }

以上,通過TaskCompletionSource<T>的SetResult給線程設置返回值,通過TaskCompletionSource<T>的.Task有獲取了線程。

另外,從.NET 4.5開始,Task的靜態方法FromResult,接收T類型,返回Task<T>。

static void Main(string[] args){    var intTask = GetIntAsync();    if (intTask.Status == TaskStatus.RanToCompletion)    {Console.WriteLine(intTask.Result);    }    else if (intTask.Status == TaskStatus.Canceled)    {Console.WriteLine("任務被取消");    }    else    {Console.WriteLine("發生錯誤哦");Console.WriteLine(intTask.Exception);    }    Console.ReadKey();}static Task<int> GetIntAsync(){    return Task.FromResult(10);}

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對的支持。如果你想了解更多相關內容請查看下面相關鏈接

標簽: ASP.NET
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产剧情一区二区在线观看| 蜜桃av在线播放| 国产亚洲欧洲| 欧美日韩激情| 狠狠爱成人网| 亚洲欧美日韩精品一区二区 | 欧美精品福利| 日韩国产一二三区| 国产乱论精品| 麻豆精品视频在线| 精品国产成人| 国产 日韩 欧美一区| 日韩欧美另类一区二区| zzzwww在线看片免费| 97精品国产福利一区二区三区| 欧美激情在线精品一区二区三区| 国产精品中文字幕制服诱惑| 欧美日本精品| 国产精品nxnn| 精品国产网站| 丝袜av一区| 国产高清一区二区| 久久高清免费观看| 亚洲区国产区| 久久av日韩| 免费福利视频一区二区三区| 日韩不卡免费高清视频| 视频福利一区| 日韩中文字幕区一区有砖一区| 石原莉奈在线亚洲二区| 日本中文字幕视频一区| 久久国产欧美日韩精品| 国产高潮在线| 国产精品88久久久久久| 六月婷婷一区| 欧美精品三级在线| 国模精品一区| 悠悠资源网久久精品| 日韩三级久久| 国产一区二区三区日韩精品| 99久久夜色精品国产亚洲1000部| 性色一区二区| 国产色噜噜噜91在线精品| 伊伊综合在线| 亚洲午夜免费| 久久久久久婷| 亚洲视频二区| 在线看片国产福利你懂的| 午夜欧美精品久久久久久久| 中文字幕av一区二区三区人 | 日本久久精品| 精品一区欧美| 欧美日本不卡| 99久久亚洲精品蜜臀| 亚欧成人精品| 成人日韩精品| 97久久超碰| 免费久久久久久久久| 国产欧美大片| 激情欧美一区二区三区| 欧美精品影院| 欧美jjzz| 青青草国产成人99久久| 9999国产精品| 青草久久视频| 99视频精品| 亚洲黄色网址| 一区二区三区网站| 日韩激情一区| 欧美视频久久| 亚洲一区二区三区高清| 国产成人精品一区二区三区视频 | 亚洲伦乱视频| 亚洲伊人精品酒店| 日韩欧美精品综合| 国产精品亚洲四区在线观看| 国户精品久久久久久久久久久不卡| 国产精品久久久久久久久久久久久久久 | 麻豆视频一区二区| 亚洲天堂日韩在线| 日本久久成人网| 国产精品sm| 蜜桃久久精品一区二区| 国产白浆在线免费观看| 国产日韩免费| 男女激情视频一区| 久久精品影视| 精品视频99| 国产毛片精品久久| 亚洲另类视频| 欧美日韩国产亚洲一区| 国产精品国产一区| 欧美视频久久| 蜜臀国产一区二区三区在线播放| 婷婷激情一区| 久久亚洲人体| 欧美日韩亚洲一区二区三区在线| 国产偷自视频区视频一区二区| 日韩理论视频| 久久精品国产999大香线蕉| 亚洲免费福利一区| 99国产精品| 九九久久婷婷| 日本高清不卡一区二区三区视频| 欧美成人一二区| 国产精一区二区| 午夜电影一区| 亚洲深深色噜噜狠狠爱网站 | 久久久久91| 超碰在线99| 国产一区二区三区久久久久久久久| 国产欧美综合一区二区三区| 蜜臀久久99精品久久久画质超高清| 免费视频亚洲| 欧美成人久久| 欧美+亚洲+精品+三区| 日韩精品dvd| 蜜桃精品在线| 精品免费av在线| 性感美女一区二区在线观看| 日本免费久久| 国产一区二区三区自拍| 日韩毛片在线| 极品裸体白嫩激情啪啪国产精品| 日韩中文影院| 久久精品电影| 狠狠干成人综合网| 久久午夜影视| 日韩区欧美区| 国产精品一区二区精品 | 美日韩一区二区三区| 美女久久精品| 日韩成人免费| 欧美日韩中文一区二区| 亚洲午夜av| 亚洲一区二区网站| 亚洲精品亚洲人成在线观看| 亚洲色图综合| 日韩黄色免费网站| 国产精品久久久久久久久免费高清 | 高清不卡一区| 99热精品久久| 久久夜色精品| 日韩精品中文字幕一区二区| 国产日韩一区二区三区在线播放| 欧美亚洲免费| 精品视频免费| 久久久久久黄| 最新日韩av| 在线日韩成人| 日本色综合中文字幕| 久久精品国产亚洲一区二区三区| 精品五月天堂| 91精品啪在线观看国产18| 国产精品88久久久久久| 最新亚洲国产| 国产伦精品一区二区三区视频 | 久久国产成人午夜av影院宅| 9久re热视频在线精品| 亚洲精品韩国| 麻豆国产欧美日韩综合精品二区| 五月激情久久| 亚洲精品成人一区| 首页国产精品| 丝袜亚洲精品中文字幕一区| 欧美日韩亚洲一区三区| 成人黄色av| 久久福利一区| 麻豆精品蜜桃视频网站| 久久中文字幕av| 少妇精品在线| 欧美激情另类| 丝袜亚洲另类欧美| 精品中文字幕一区二区三区 | 黄色av一区| 日韩av中文字幕一区二区三区| 麻豆国产欧美一区二区三区 | 国产精品成人国产| 免费久久99精品国产| 欧美激情五月| 九一成人免费视频| 欧美伊人影院| 久久网站免费观看| 欧美日韩一区二区三区不卡视频| av高清不卡| 亚洲一级少妇| 91亚洲无吗| 欧美亚洲国产激情| 国产精品伊人| 亚洲少妇自拍| 精品国产成人| 色婷婷成人网| 久久久人人人| 国产情侣一区| 夜夜嗨一区二区三区| 精品国产亚洲日本| 每日更新成人在线视频| 蜜桃久久久久| 免费日韩一区二区| 中文字幕在线看片|