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

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

.Net中Task Parallel Library的基本用法

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

我們知道,每個應用程序就是一個進程,一個進程有多個線程。Task Parallel Library為我們的異步編程、多線程編程提供了強有力的支持,它允許一個主線程運行的同時,另外的一些線程或Task也同時運行。本篇體驗基本用法。

基本用法

Taks的構造函數接收的類型是Action,也就是一個委托。

static void Main(string[] args){    var t1 = new Task(() =>    {Console.WriteLine("任務1開始");Thread.Sleep(1000);Console.WriteLine("任務1結束");    });    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("任務{0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務{0}結束",id);}

如果有多個Task同時執行。

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,每個Task手動啟動的話很費事,Task Parallel Library為我們準備了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();}

如果我們想在一個任務結束之后立即執行某個任務,可以使用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("任務{0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務{0}結束",id);}static void DoOtherThing(int id, int sleepTime){    Console.WriteLine("其他任務{0}開始", id);    Thread.Sleep(sleepTime);    Console.WriteLine("其他任務{0}結束", id);}

如果希望等待所有的Task執行完畢,使用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執行完畢后才執行的");    Console.ReadKey();}

如果想手動取消結束某個Task,需要為方法帶上CancellationToken類型參數。

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("任務被取消");token.ThrowIfCancellationRequested();    }        Console.WriteLine("任務{0}開始",id);    Thread.Sleep(sleepTime);    Console.WriteLine("任務{0}結束",id);}static void DoOtherThing(int id, int sleepTime){    Console.WriteLine("其他任務{0}開始", id);    Thread.Sleep(sleepTime);    Console.WriteLine("其他任務{0}結束", id);}

如何從Task從獲取方法的返回結果呢?

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

后面一個Task獲取前面一個Task的返回值。

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

等待所有Task完成。

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

如果是嵌套Task。

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

啟動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實例方法

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的靜態方法Run

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

一個例子

比如說要下載某個頁面,在保持當前UI界面無影響的情況下,使用Task在后臺啟動任務下載某個頁面。

static void Main(string[] args){    Console.WriteLine("界面內容");    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));}

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

標簽: ASP.NET
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲免费观看高清完整版在线观| 国产精品一区二区三区www | 欧美天堂视频| 国产精品一区二区精品| 亚洲精品亚洲人成在线观看| 日韩专区一卡二卡| 蜜桃传媒麻豆第一区在线观看| 亚洲少妇一区| 日韩欧美中文字幕在线视频| 免费看黄色91| 日韩和欧美一区二区三区| 日本一区二区三区视频在线看| 日韩精品视频网站| 国产精品xxx| 日韩综合在线| 在线亚洲成人| 亚洲久久视频| 久久福利在线| 欧美福利一区| 美女日韩在线中文字幕| 青青草91久久久久久久久| 欧美激情麻豆| 99精品电影| 视频在线观看一区| 国产精品地址| 国产国产精品| 欧美另类中文字幕| 亚洲伦乱视频| 青青草国产成人99久久| 久久久久久久久久久妇女| 日韩精品一区二区三区中文在线| 精品国产成人| 亚洲免费婷婷| 精品伊人久久| 极品裸体白嫩激情啪啪国产精品| 亚洲开心激情| 久久久久国产一区二区| 欧美另类中文字幕| 亚洲电影在线| 久久久精品区| 日韩在线观看中文字幕| 99精品在线免费在线观看| 国产精品日本一区二区不卡视频 | 日韩av电影一区| 99精品美女| 国产在线观看91一区二区三区| 丝袜美腿亚洲色图| 婷婷成人综合| 国产精品欧美在线观看| 天海翼精品一区二区三区| 久久久久国产一区二区| 精品欧美视频| 你懂的国产精品永久在线| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品小说| 国产精品成人一区二区不卡| 免费观看日韩电影| 久久精品影视| 日韩综合精品| 日产精品一区| 国产盗摄——sm在线视频| 精品视频一区二区三区四区五区| 国产探花一区在线观看| 日本精品一区二区三区在线观看视频 | 日韩精品一区二区三区免费视频| 99视频精品免费观看| 日韩电影免费网站| 日本一区二区免费高清| 91一区二区三区四区| av一区二区高清| 欧美另类专区| 99亚洲视频| 天堂网在线观看国产精品| 国产精品v亚洲精品v日韩精品| 亚洲精品欧洲| 免费视频一区二区| 一区二区高清| 国产精品入口久久| 国产精品亚洲一区二区在线观看 | 久久久国产亚洲精品| av高清不卡| 91久久黄色| 免费精品国产| 久久国产毛片| 亚洲中字黄色| 亚洲精品四区| 黄色精品网站| 亚洲一区有码| 国产高清日韩| 色老板在线视频一区二区| 亚洲五月婷婷| 99国产精品视频免费观看一公开| 在线精品视频在线观看高清| 免费日韩av| 日韩国产精品久久久久久亚洲| 青青青国产精品| 久久久亚洲一区| 日av在线不卡| 日本а中文在线天堂| 在线日韩成人| 日韩电影免费在线观看| 欧美高清一区| 国产精品久久久久久av公交车| 欧美日韩亚洲在线观看| 日韩高清在线不卡| 三级在线看中文字幕完整版| 亚洲免费影院| 中文在线а√在线8| 日韩久久99| 丝袜av一区| 国产精品香蕉| 日韩影院精彩在线| 色爱综合网欧美| а√天堂8资源中文在线| 亚洲在线成人| 国内不卡的一区二区三区中文字幕| 久久国产成人| 激情婷婷综合| 日韩精品91| 丁香婷婷久久| 久久99偷拍| 国产欧美91| 日本不卡高清| 婷婷综合社区| 神马久久午夜| 日本蜜桃在线观看视频| 国产精品17p| 国产女人18毛片水真多18精品| 99日韩精品| 午夜国产一区二区| 久久中文字幕av| 鲁大师影院一区二区三区| 日韩中文字幕av电影| 亚洲欧洲美洲国产香蕉| 在线日韩成人| 国产精品一线天粉嫩av| 国产成人免费| 午夜日韩在线| 日本一区二区三区视频在线看| 久久国产精品毛片| 国产另类在线| 天堂8中文在线最新版在线| 丝袜av一区| 国产一区导航| 国产精品2023| 国产日韩欧美一区| 精品久久久久中文字幕小说| 亚洲精品无播放器在线播放| 日韩中文字幕不卡| 91久久国产| 国产麻豆综合| 麻豆91在线播放| 麻豆传媒一区二区三区| 久久久国产精品入口麻豆| 欧美一区网站| 国产欧美日本| 日本一二区不卡| a国产在线视频| 亚洲精品88| 亚洲精品影视| 国产精品久久久久久久久久久久久久久| 老牛国内精品亚洲成av人片| 青青青免费在线视频| 亚洲日韩视频| 欧美日韩一区自拍| 日本一区二区高清不卡| 亚洲电影在线| 精品国产一区二区三区性色av| 国产中文字幕一区二区三区| 国产一区二区中文| 日韩av一级片| 久久国产精品亚洲77777| 国产精品v一区二区三区| 久久精品一本| 精品久久不卡| 国产精品日韩精品中文字幕| 婷婷综合六月| 国产欧美一区二区三区精品观看| 日韩国产欧美在线播放| 午夜精品免费| 精品国产一区二区三区性色av| 国产精品美女| 精品国产aⅴ| 美女在线视频一区| 国产精品老牛| 美女国产精品久久久| 亚洲欧美一区在线| 激情婷婷久久| 国产精品对白久久久久粗| 亚洲欧美激情诱惑| 伊人久久成人| 蜜臀国产一区| 久久99国产精品视频| 亚洲精品看片| 婷婷综合国产| 欧美精品一二| 88xx成人免费观看视频库| 国产精品22p| 免费福利视频一区二区三区| 91欧美日韩在线|