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

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

.Net中Task Parallel Library的進階用法

瀏覽:284日期: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久久,三上悠亚国产精品一区二区三区
精品国产91| 久久精品国产一区二区| 久久亚洲黄色| 国产日韩欧美三级| 日韩va亚洲va欧美va久久| 亚洲精一区二区三区| 免费视频最近日韩| 亚洲精品乱码久久久久久蜜桃麻豆 | 精品国产网站| 黄色日韩精品| 国产精品日本欧美一区二区三区| 日本久久精品| 红杏一区二区三区| 黄色在线观看www| 日韩一区欧美| 99久久亚洲精品| 亚洲男女av一区二区| 黄色av日韩| 婷婷视频一区二区三区| 久久狠狠亚洲综合| 国产精品视频一区视频二区| 国产精品男女| 日本一区二区免费高清| 天堂网av成人| 天堂av在线一区| 国产亚洲一区| 国产一区一一区高清不卡| 日本高清不卡一区二区三区视频 | 国产一区二区久久久久| 日韩欧美二区| 首页亚洲欧美制服丝腿| 亚洲精品系列| 欧美激情99| 色老板在线视频一区二区| 在线一区免费| 日本成人在线不卡视频| 国产精品hd| 久久久精品久久久久久96 | 国产伦久视频在线观看| 精品一区在线| 日韩中文字幕无砖| 高清一区二区三区av| 午夜日韩福利| 国产情侣一区| 99久久视频| 日韩高清在线一区| 久草免费在线视频| 亚洲视频国产精品| 亚洲一区欧美| 国产精品黄网站| 免费一级欧美在线观看视频| 国产精品久久久久av蜜臀| 精品一区三区| 欧美日本久久| 久久高清国产| 国产在线不卡一区二区三区| 国产精品一区二区三区四区在线观看| 亚洲综合欧美| 一区二区91| 久久高清精品| 亚洲欧美综合| 亚洲精品伊人| 久久99影视| 国产精品国产三级国产在线观看| 日韩视频在线一区二区三区 | 高清一区二区三区| 美女国产一区二区三区| 亚洲国产专区校园欧美| 麻豆久久精品| 欧美日韩xxxx| 丁香婷婷久久| 久久亚洲色图| 福利一区在线| 亚洲精品在线a| 天堂√中文最新版在线| 九一成人免费视频| 日精品一区二区三区| 亚洲福利一区| 亚洲三级观看| 综合日韩av| 日本在线高清| 亚洲成人不卡| 视频一区二区国产| 久久精品99国产精品日本| 麻豆91精品91久久久的内涵| 久久黄色影院| 免费黄网站欧美| 国产精品伊人| 亚洲伊人av| 国产99久久| 青青草伊人久久| 黄色网一区二区| 亚洲我射av| 中文字幕在线免费观看视频| 日本午夜免费一区二区 | 亚洲特级毛片| 国产亚洲午夜| 亚洲精品国产日韩| а√天堂8资源在线| 日本亚洲视频| 久久精品欧美一区| 成人国产精品| 久久99影视| 奇米狠狠一区二区三区| 999国产精品视频| 精品视频99| 国产日产精品_国产精品毛片| 亚洲久久视频| 亚洲一区成人| 午夜精品一区二区三区国产| 精品视频97| 激情国产在线| 精品久久91| 色黄视频在线观看| 婷婷激情久久| 日韩精品一页| 欧美日韩国产探花| 日韩国产在线| 久久三级视频| 精品国产亚洲一区二区三区大结局| 水蜜桃精品av一区二区| 亚洲欧洲美洲av| 国产精品最新自拍| 日韩精品中文字幕一区二区| 国产精品最新| 国产一区丝袜| 国户精品久久久久久久久久久不卡| 三级在线看中文字幕完整版| 日韩精品一卡| 一区二区三区网站| 日韩av不卡一区二区| 国产精品毛片在线| 性欧美xxxx免费岛国不卡电影| 麻豆视频在线观看免费网站黄 | 亚洲一区免费| 午夜在线一区二区| 三级亚洲高清视频| 蜜臀精品一区二区三区在线观看| 男女精品网站| 亚洲人成高清| 国产日韩欧美一区二区三区在线观看| 欧美日一区二区三区在线观看国产免| 久久狠狠久久| 国产伦理一区| 精品美女视频 | 亚洲天堂日韩在线| 亚洲精品无吗| 国产精品日韩精品中文字幕| 久久精品色播| av高清不卡| 91精品91| 美国欧美日韩国产在线播放| 日本不卡视频在线观看| 欧美日韩一区二区三区不卡视频 | 国产精品久久久久av电视剧| а√天堂8资源中文在线| 国产精品久久久久久久久久妞妞| 色爱av综合网| 国产精品久一| 私拍精品福利视频在线一区| 国产精品免费99久久久| 久久国产麻豆精品| 亚洲精品欧洲| 视频在线观看国产精品| 国产99精品一区| 成人片免费看| 高清av一区| 蜜桃久久久久| 91精品丝袜国产高跟在线| 亚洲18在线| av不卡在线看| 久久国产中文字幕| 99成人在线视频| 欧产日产国产精品视频| 欧美一级二区| 91欧美极品| 精品一区二区三区中文字幕视频 | 久久福利一区| 亚洲精品看片| 综合在线一区| 亚洲欧美专区| 精品精品99| 伊人影院久久| 国产欧美精品| 欧美.日韩.国产.一区.二区| 日本精品一区二区三区在线观看视频 | 久久久久久一区二区| 久久精品高清| 久久久久午夜电影| 日韩一区二区三区免费播放| 久久国产婷婷国产香蕉| 亚洲一区二区三区高清| 欧美freesex黑人又粗又大| 国产三级一区| 日韩精品一级| 欧美专区18| 乱人伦精品视频在线观看| 亚洲国产成人精品女人| 欧美一级精品| 四虎4545www国产精品 |