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

您的位置:首頁技術(shù)文章
文章詳情頁

.Net中Task Parallel Library的基本用法

瀏覽:283日期:2022-06-08 16:47:04

我們知道,每個(gè)應(yīng)用程序就是一個(gè)進(jìn)程,一個(gè)進(jìn)程有多個(gè)線程。Task Parallel Library為我們的異步編程、多線程編程提供了強(qiáng)有力的支持,它允許一個(gè)主線程運(yùn)行的同時(shí),另外的一些線程或Task也同時(shí)運(yùn)行。本篇體驗(yàn)基本用法。

基本用法

Taks的構(gòu)造函數(shù)接收的類型是Action,也就是一個(gè)委托。

static void Main(string[] args){    var t1 = new Task(() =>    {Console.WriteLine("任務(wù)1開始");Thread.Sleep(1000);Console.WriteLine("任務(wù)1結(jié)束");    });    t1.Start();    Console.ReadKey();}

如果把方法放到外面。

static void Main(string[] args){    var t1 = new Task(() => DoSth(1,2000));    t1.Start();    Console.ReadKey();}static void DoSth(int id, int sleepTime){    Console.WriteLine("任務(wù){(diào)0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務(wù){(diào)0}結(jié)束",id);}

如果有多個(gè)Task同時(shí)執(zhí)行。

static void Main(string[] args){    var t1 = new Task(() => DoSth(1,2000));    t1.Start();    var t2 = new Task(() => DoSth(2, 1500));    t2.Start();    var t3 = new Task(() => DoSth(3, 3000));    t3.Start();    Console.ReadKey();}

如果有很多Task,每個(gè)Task手動(dòng)啟動(dòng)的話很費(fèi)事,Task Parallel Library為我們準(zhǔn)備了Task工廠。

static void Main(string[] args){    var t1 = Task.Factory.StartNew(() => DoSth(1, 2000));    var t2 = Task.Factory.StartNew(() => DoSth(2, 1500));    var t3 = Task.Factory.StartNew(() => DoSth(3, 3000));    Console.ReadKey();}

如果我們想在一個(gè)任務(wù)結(jié)束之后立即執(zhí)行某個(gè)任務(wù),可以使用ContinueWith方法。

static void Main(string[] args){    var t1 = Task.Factory.StartNew(() => DoSth(1, 2000)).ContinueWith((pre)=> DoOtherThing(4,2000));     var t2 = Task.Factory.StartNew(() => DoSth(2, 1500));    var t3 = Task.Factory.StartNew(() => DoSth(3, 3000));    Console.ReadKey();}static void DoSth(int id, int sleepTime){    Console.WriteLine("任務(wù){(diào)0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務(wù){(diào)0}結(jié)束",id);}static void DoOtherThing(int id, int sleepTime){    Console.WriteLine("其他任務(wù){(diào)0}開始", id);    Thread.Sleep(sleepTime);    Console.WriteLine("其他任務(wù){(diào)0}結(jié)束", id);}

如果希望等待所有的Task執(zhí)行完畢,使用WaitAll方法。

static void Main(string[] args){    var t1 = Task.Factory.StartNew(() => DoSth(1, 2000));    var t2 = Task.Factory.StartNew(() => DoSth(2, 1500));    var t3 = Task.Factory.StartNew(() => DoSth(3, 3000));    var taskList = new List<Task> {t1, t2, t3};    Task.WaitAll(taskList.ToArray());    Console.WriteLine("我是在所有Task執(zhí)行完畢后才執(zhí)行的");    Console.ReadKey();}

如果想手動(dòng)取消結(jié)束某個(gè)Task,需要為方法帶上CancellationToken類型參數(shù)。

static void Main(string[] args){    var source = new CancellationTokenSource();    try    {var t1 =    Task.Factory.StartNew(() => DoSth(1, 1000, source.Token)).ContinueWith((pre) => DoOtherThing(2, 2000));source.Cancel();    }    catch (Exception ex)    {Console.WriteLine(ex.GetType());    }    Console.WriteLine("haha");    Console.ReadKey();}static void DoSth(int id, int sleepTime, CancellationToken token){    if (token.IsCancellationRequested)    {Console.WriteLine("任務(wù)被取消");token.ThrowIfCancellationRequested();    }        Console.WriteLine("任務(wù){(diào)0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務(wù){(diào)0}結(jié)束",id);}static void DoOtherThing(int id, int sleepTime){    Console.WriteLine("其他任務(wù){(diào)0}開始", id);    Thread.Sleep(sleepTime);    Console.WriteLine("其他任務(wù){(diào)0}結(jié)束", id);}

如何從Task從獲取方法的返回結(jié)果呢?

static void Main(string[] args){    Console.WriteLine("開始計(jì)算");    Task<int> t = Task.Factory.StartNew(() => Sum(1, 2));    Console.WriteLine("等待結(jié)果");    Console.WriteLine(t.Result);    Console.ReadKey();}static int Sum(int a, int b){    return a + b;}

后面一個(gè)Task獲取前面一個(gè)Task的返回值。

static void Main(string[] args){    Task<string> firstTask = Task.Factory.StartNew<string>(() =>    {Console.WriteLine("第一個(gè)任務(wù)開始");return "hi from the one";    });    Task secondTask = firstTask.ContinueWith((prevoursTask) =>    {Console.WriteLine("這里是第二個(gè)任務(wù),獲取到第一個(gè)任務(wù)的返回值是{0}",prevoursTask.Result,TaskContinuationOptions.OnlyOnRanToCompletion);    });    secondTask.Wait();    Console.ReadKey();}

等待所有Task完成。

static void Main(string[] args){   var t1 =  Task.Factory.StartNew(() =>    {Console.WriteLine("第一個(gè)任務(wù)");Thread.Sleep(1000);    });    var t2 = Task.Factory.StartNew(() =>    {Console.WriteLine("第二個(gè)任務(wù)");Thread.Sleep(1000);    });    var taskList = new List<Task> {t1, t2};    Task.Factory.ContinueWhenAll(taskList.ToArray(), (t) => { Console.WriteLine("所有任務(wù)完成我就出來"); });    Console.ReadKey();}

如果是嵌套Task。

static void Main(string[] args){    Task.Factory.StartNew(() =>    {Task child = Task.Factory.StartNew(() =>{    Console.WriteLine("我是子任務(wù)");}, TaskCreationOptions.AttachedToParent);    }).Wait();    Console.ReadKey();}

啟動(dòng)Task的幾種方式

1、通過Task.Factory.StartNew方法。

static void Main(string[] args){    Task.Factory.StartNew(() => SaySth("hello"));    Console.ReadKey();}static void SaySth(string msg){    Console.WriteLine(msg);}

2、通過Task的Start實(shí)例方法

static void Main(string[] args){    var t = new Task(() => SaySth("hello"));    t.Start();    Console.ReadKey();}

或者干脆用委托。

static void Main(string[] args){    Task t = new Task(delegate {SaySth("hello");});    t.Start();    Console.ReadKey();}

3、Task的靜態(tài)方法Run

static void Main(string[] args){    Task t = Task.Run(() => SaySth("hello"));    Console.ReadKey();}static void SaySth(string msg){    Console.WriteLine(msg);}  

一個(gè)例子

比如說要下載某個(gè)頁面,在保持當(dāng)前UI界面無影響的情況下,使用Task在后臺(tái)啟動(dòng)任務(wù)下載某個(gè)頁面。

static void Main(string[] args){    Console.WriteLine("界面內(nèi)容");    Task<string> r = DownloadAsync("http://www.baidu.com");    while (!r.IsCompleted)    {Console.Write(".");Thread.Sleep(250);    }    Console.WriteLine(r.Result);    Console.ReadKey();}private static string DownloadWebPage(string url){    WebRequest request = WebRequest.Create(url);    WebResponse response = request.GetResponse();    var reader = new StreamReader(response.GetResponseStream());    return reader.ReadToEnd();}private static Task<string> DownloadAsync(string url){    return Task.Factory.StartNew(() => DownloadWebPage(url));}

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

標(biāo)簽: ASP.NET
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
午夜国产精品视频| 亚洲精品护士| 国产精品一区高清| 欧美一区成人| 涩涩av在线| 国产一区丝袜| 国产资源在线观看入口av| 国产成人久久精品麻豆二区| 国产成人精品一区二区三区在线| 久久精品国产成人一区二区三区| 老司机精品视频在线播放| 日本中文字幕一区二区视频| 日韩avvvv在线播放| 欧美一区成人| 精品国产网站| 欧美aa在线观看| 欧美日中文字幕| 久久国产99| 欧美日本一区| 国产精品成人a在线观看| 久久久久99| 视频一区视频二区中文字幕| 日韩高清三区| 国产成人77亚洲精品www| 久久精品动漫| 视频一区在线视频| 日本国产一区| 97精品中文字幕| 最新亚洲激情| 国产欧美精品| 日韩精品一区二区三区免费观看| 久久国产福利| 欧美精品三级在线| 久久精品国产99久久| 色婷婷色综合| 午夜日本精品| 日本亚洲欧洲无免费码在线| 国产精品宾馆| 三上悠亚国产精品一区二区三区| 香蕉精品视频在线观看| 婷婷视频一区二区三区| 欧美亚洲国产日韩| 久久一区亚洲| 婷婷亚洲五月| 欧美一区自拍| 日本精品影院| 日韩一区中文| 美女一区网站| 亚洲精品国模| 日韩精品诱惑一区?区三区| 一区久久精品| 国产精东传媒成人av电影| 久久精品欧美一区| 日韩激情综合| 日韩欧美一区二区三区在线视频| 久久亚洲二区| 里番精品3d一二三区| 日韩精品永久网址| 少妇精品久久久一区二区| 卡一精品卡二卡三网站乱码| 亚洲激情五月| 久久一区二区三区喷水| 免费久久99精品国产| 欧美欧美黄在线二区| а√天堂中文在线资源8| 日韩视频久久| 久久不见久久见国语| 国产国产精品| 久久中文字幕导航| 视频一区在线播放| 另类专区亚洲| 日韩区欧美区| 精品视频亚洲| 午夜亚洲福利在线老司机| 精品99久久| 亚洲精品美女91| 欧美日韩中文一区二区| 国产精品天堂蜜av在线播放| 蜜臀91精品国产高清在线观看| 国产精品亲子伦av一区二区三区| 最新亚洲一区| 激情亚洲影院在线观看| 国产麻豆精品久久| 日韩高清国产一区在线| 四季av一区二区凹凸精品| 蜜臀a∨国产成人精品| 欧美日韩视频网站| 日本va欧美va精品发布| 日韩一级精品| 欧美日韩精品免费观看视完整| 国产精成人品2018| 日韩国产欧美三级| 免费视频一区二区| 久久在线电影| 国产精品毛片久久| 国产乱人伦丫前精品视频| 视频精品一区二区| 欧美性感美女一区二区| 国产成人久久精品麻豆二区| 欧美日韩精品一区二区三区在线观看| 中文亚洲欧美| 久久精品国产大片免费观看| 欧美激情麻豆| 91福利精品在线观看| 免费人成黄页网站在线一区二区| 999国产精品999久久久久久| 精品视频免费| 久久99影视| 欧美欧美黄在线二区| 亚洲不卡视频| 蜜桃视频在线观看一区| 尤物在线精品| 免费观看不卡av| 国产综合婷婷| 欧美精选一区二区三区| 久久国产精品成人免费观看的软件| 国产精品原创| 国产精品115| 国产精品探花在线观看| 日本va欧美va精品发布| 日韩国产精品久久久久久亚洲| 在线精品观看| 亚洲乱码视频| 日韩欧美精品一区二区综合视频| 亚洲三级av| 日韩欧美2区| 青青国产91久久久久久| 91精品国产自产观看在线 | 亚洲福利久久| 日韩美女一区二区三区在线观看| 欧美xxxx中国| 天堂а√在线最新版中文在线| 日韩欧美字幕| 美女网站视频一区| 激情综合在线| 一区在线观看| 亚洲+小说+欧美+激情+另类| 日韩精品三级| 国产精品毛片视频| 国产成人在线中文字幕| 啪啪国产精品| 老鸭窝毛片一区二区三区| 亚洲一二三区视频| 国产情侣一区在线| 国产精品巨作av| 高清av一区| 久久精品国产68国产精品亚洲| 不卡中文一二三区| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美一区=区三区| 国产不卡一区| 在线一区电影| 日本午夜精品久久久| 国产精品久久久久9999高清| 国产一区调教| 尤物网精品视频| 日本午夜精品一区二区三区电影| 麻豆久久久久久| 欧美午夜精品一区二区三区电影| 亚洲欧美久久| 国产欧美自拍一区| 日本免费久久| 亚洲涩涩av| 你懂的国产精品永久在线| 日本免费一区二区三区四区| 免费精品视频| 国产精品视频首页| 亚洲va在线| 亚洲精品人人| 国产传媒av在线| 久久福利一区| 精品国产一区二区三区性色av| 亚洲天堂久久| 国产欧美日韩| 99视频精品全部免费在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产日韩欧美中文在线| 神马午夜久久| 青青草国产精品亚洲专区无| 亚洲精品**中文毛片| 久久亚洲欧洲| 国内精品伊人| 蜜桃视频在线观看一区| 国产精品精品国产一区二区| 首页国产欧美日韩丝袜| 高清av一区| 日本中文字幕视频一区| 亚洲成人不卡| 国产欧美日韩精品高清二区综合区| 日韩精品午夜| 国产精品丝袜在线播放| 欧美~级网站不卡| 国产精品视频一区二区三区综合 | 久久国产精品色av免费看| 99精品电影| 国产精品一区二区av日韩在线| 免费不卡中文字幕在线| 国产精品mv在线观看| 国产模特精品视频久久久久| 精品久久电影|