国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

.NET 4并行編程之Task基礎(chǔ)部分完結(jié)篇

開(kāi)發(fā) 后端
本文將介紹的是Task基礎(chǔ)部分完結(jié)篇,將談到獲取Task的狀態(tài),執(zhí)行晚加載的Task(Lazily Task) 和常見(jiàn)問(wèn)題的解決方案。

查看本系列其他文章,請(qǐng)參看

[[11863]]

本篇的主要議題如下:

1.獲取Task的狀態(tài)

2.執(zhí)行晚加載的Task(Lazily Task)

3.常見(jiàn)問(wèn)題的解決方案

1.獲取Task的狀態(tài)

在.NET并行編程還有一個(gè)已經(jīng)標(biāo)準(zhǔn)化的操作就是可以獲取task的狀態(tài),通過(guò)Task.Status屬性來(lái)得到的,這個(gè)屬性返回一個(gè)System.Threading.Tasks.TaskStatus的枚舉值。

如下:

Created:表明task已經(jīng)被初始化了,但是還沒(méi)有加入到Scheduler中。

WatingForActivation:task正在等待被加入到Scheduler中。

 WaitingToRun:已經(jīng)被加入到了Scheduler,等待執(zhí)行。

Running:task正在運(yùn)行

WaitingForChildrenToComplete:表明父task正在等待子task運(yùn)行結(jié)束。

RanToCompletion:表明task已經(jīng)執(zhí)行完了,但是還沒(méi)有被cancel,而且也這個(gè)task也沒(méi)有拋出異常。

Canceled:表明task已經(jīng)被cancel了。(大家可以參看之前講述取消task的文章)

Faulted:表明task在運(yùn)行的時(shí)候已經(jīng)拋出了異常。

2.執(zhí)行晚加載的Task(Lazily Task)

晚加載,或者又名延遲初始化,主要的好處就是避免不必要的系統(tǒng)開(kāi)銷。在并行編程中,可以聯(lián)合使用Lazy變量和Task<>.Factory.StartNew()做到這點(diǎn)。(Lazy變量時(shí).NET 4中的一個(gè)新特性,這里大家不用知道Lazy的具體細(xì)節(jié))

Lazy變量只有在用到的時(shí)候才會(huì)被初始化。所以我們可以把Lazy變量和task的創(chuàng)建結(jié)合:只有這個(gè)task要被執(zhí)行的時(shí)候才去初始化。

下面還是通過(guò)例子來(lái)講解: 

代碼 
 

  1. static void Main(string[] args)  
  2.        {  
  3.            // define the function  
  4.            Func<string> taskBody = new Func<string>(() =>  
  5.            {  
  6.                Console.WriteLine("Task body working...");  
  7.                return "Task Result";  
  8.            });  
  9.  
  10.            // create the lazy variable  
  11.            Lazy<Task<string>> lazyData = new Lazy<Task<string>>(() =>  
  12.            Task<string>.Factory.StartNew(taskBody));  
  13.  
  14.            Console.WriteLine("Calling lazy variable");  
  15.            Console.WriteLine("Result from task: {0}", lazyData.Value.Result);  
  16.  
  17.            // do the same thing in a single statement  
  18.            Lazy<Task<string>> lazyData2 = new Lazy<Task<string>>(  
  19.            () => Task<string>.Factory.StartNew(() =>  
  20.            {  
  21.                Console.WriteLine("Task body working...");  
  22.                return "Task Result";  
  23.            }));  
  24.  
  25.            Console.WriteLine("Calling second lazy variable");  
  26.            Console.WriteLine("Result from task: {0}", lazyData2.Value.Result);  
  27.  
  28.            // wait for input before exiting  
  29.            Console.WriteLine("Main method complete. Press enter to finish.");  
  30.            Console.ReadLine();  
  31.        } 

首先我們回想一下,在之前的系列文章中我們是怎么定義一個(gè)task的:直接new,或者通過(guò)task的factory來(lái)創(chuàng)建,因?yàn)閯?chuàng)建task的代碼是在main函數(shù)中的,所以只要new了一個(gè)task,那么這個(gè)task就被初始化。現(xiàn)在如果用了Lazy的task,那么現(xiàn)在我們初始化的就是那個(gè)Lazy變量了,而沒(méi)有初始化task,(初始化Lazy變量的開(kāi)銷小于初始化task),只有當(dāng)調(diào)用了lazyData.Value時(shí),Lazy變量中包含的那個(gè)task才會(huì)初始化。(這里歡迎大家提出自己的理解)

3.常見(jiàn)問(wèn)題的解決方案

a.Task 死鎖

描述:如果有兩個(gè)或者多個(gè)task(簡(jiǎn)稱TaskA)等待其他的task(TaskB)執(zhí)行完成才開(kāi)始執(zhí)行,但是TaskB也在等待TaskA執(zhí)行完成才開(kāi)始執(zhí)行,這樣死鎖就產(chǎn)生了。

解決方案:避免這個(gè)問(wèn)題最好的方法就是:不要使的task來(lái)依賴其他的task。也就是說(shuō),最好不要你定義的task的執(zhí)行體內(nèi)包含其他的task。

例子:在下面的例子中,有兩個(gè)task,他們相互依賴:他們都要使用對(duì)方的執(zhí)行結(jié)果。當(dāng)主程序開(kāi)始運(yùn)行之后,兩個(gè)task也開(kāi)始運(yùn)行,但是因?yàn)閮蓚€(gè)task已經(jīng)死鎖了,所以主程序就一直等待。

代碼

  1. static void Main(string[] args)  
  2.         {  
  3.             // define an array to hold the Tasks  
  4.             Task<int>[] tasks = new Task<int>[2];  
  5.  
  6.             // create and start the first task  
  7.             tasks[0] = Task.Factory.StartNew(() =>  
  8.             {  
  9.                 // get the result of the other task,  
  10.                 // add 100 to it and return it as the result  
  11.                 return tasks[1].Result + 100;  
  12.             });  
  13.  
  14.             // create and start the second task  
  15.             tasks[1] = Task.Factory.StartNew(() =>  
  16.             {  
  17.                 // get the result of the other task,  
  18.                 // add 100 to it and return it as the result  
  19.                 return tasks[1].Result + 100;  
  20.             });  
  21.  
  22.  
  23.             // wait for the tasks to complete  
  24.             Task.WaitAll(tasks);  
  25.  
  26.             // wait for input before exiting  
  27.             Console.WriteLine("Main method complete. Press enter to finish.");  
  28.             Console.ReadLine();  
  29.         } 

本篇就到這里了,很短,基礎(chǔ)的部分就基本介紹完了,后面的文章就開(kāi)始講述應(yīng)用。

責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2010-06-04 09:11:10

.NET并行編程

2010-06-08 08:41:08

.NET 4并行編程

2010-06-07 08:43:46

.NET 4并行編程

2010-06-09 09:18:34

.NET 4并行編程

2010-06-24 09:12:27

.NET 4并行編程

2021-04-27 19:20:54

微應(yīng)用模塊聯(lián)邦

2010-06-02 08:53:51

.NET 4并行編程

2022-01-24 13:46:24

框架

2021-04-25 18:42:02

Serverless 文件上傳用戶管理

2018-03-27 13:26:51

教程

2011-03-24 09:23:43

.NET 4多核并行

2014-12-25 10:48:21

程序員代碼

2025-02-24 07:39:53

2018-06-01 15:41:21

2011-07-21 10:17:53

java

2011-06-22 10:20:11

QT 鼠標(biāo) 拖放

2024-09-27 19:42:09

工具C#Task?

2024-09-29 16:22:18

多線程TaskC#

2015-10-13 09:18:00

.Net編程教程

2012-02-06 13:15:37

IP-guard三重保信息防泄漏溢信科技
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

中文字幕制服丝袜成人av| 欧美精品久久久久久久自慰| 国产伦精品一区二区三区在线播放| 国产丝袜高跟一区| 欧美影视资讯| 日韩精品久久久久久久玫瑰园| av基地在线| 欧美第一区第二区| 欧美性video| 欧美乱熟臀69xxxxxx| 韩国成人免费视频| 亚洲视频第一页| 色戒汤唯在线观看| 欧美成人黄色小视频| 悠悠资源网亚洲青| 欧美美女15p| 欧美午夜寂寞| 91国产精品视频在线| re久久精品视频| 精品中文字幕一区| 国产成人av福利| 久久这里只精品| 精品国产成人在线| 激情成人四房播| 亚洲男人第一av网站| 丁香婷婷激情网| 91老师国产黑色丝袜在线| 九七伦理97伦理| 欧美三级中文字幕在线观看| 美女色狠狠久久| 欧美巨大黑人极品精男| 久久久久久久久久久久久久久久久久| 午夜精品区一区二区三| 中文字幕制服丝袜一区二区三区 | 一区二区三区在线视频免费| 国产三级电影在线观看| 亚洲视频欧洲视频| 日韩精品久久| 欧美黄网在线观看| 欧美性xxxx极品hd满灌| 中文在线观看免费| 久久国产一区二区三区| 国模吧视频一区| 久久久999视频| 在线播放91灌醉迷j高跟美女 | 欧美成人精品一区二区男人看| 亚洲欧美制服丝袜| 欧美美女一区| 久久久久久久久影视| 久久噜噜亚洲综合| 日韩黄色动漫| 日韩精品在线一区二区| 国产毛片久久久| 成人免费看吃奶视频网站| 韩国v欧美v日本v亚洲v| 韩日在线视频| 中文国产成人精品| 黄色av日韩| 国产精品亚洲αv天堂无码| 在线视频国产一区| 成人免费av电影| 欧美第一黄网| 欧美日韩美女在线观看| 中文字幕成人| 亚洲一区二区精品在线| 天天亚洲美女在线视频| 国产一区二区三区免费观看在线| 亚洲精品乱码视频| 亚洲久久成人| 国产精品粉嫩av| 色狠狠av一区二区三区香蕉蜜桃| 欧美猛男男男激情videos| 欧美男人的天堂| 久久久久久97三级| 2021av在线| 国产欧美日韩视频| 国产精品综合在线视频| 日本理论片午伦夜理片在线观看| 91美女片黄在线观| 99久久er热在这里只有精品66| 欧美卡一卡二| 国产福利久久| 欧美日韩免费网站| 国产成人久久| 国产美女视频黄a视频免费| 日韩中文字幕在线看| 国产精品一区在线观看乱码| а√在线天堂官网| 亚洲精品国产精品国自产| 日韩免费在线观看| 国产一区成人| 亚洲国产精品成人一区二区在线| 国产精品久久久久久久久久久久久久 | 免费播放av| 色老头一区二区三区| 9999久久久久| 日日碰狠狠丁香久燥| 久久精品人人做人人爽| 成人av在线电影| 日日av拍夜夜添久久免费| 综合久久国产| 国产一区二区三区在线免费观看| 国产麻豆一精品一av一免费 | 国产亚洲欧洲高清一区| 91久久久精品国产| melody高清在线观看| 亚洲一区制服诱惑| 欧美三级视频在线播放| 你懂的国产精品永久在线| 欧洲日本在线| 在线播放国产精品| 国产伦精品一区二区三区免费迷| h1515四虎成人| jizzjizz国产精品喷水| 欧美激情视频网址| 亚洲综合视频网| 亚洲激情综合| 自拍网站在线观看| 久草综合在线观看| 国产欧美中文字幕| 欧美日韩久久一区二区| 免费观看成人av| 亚洲一区av| 日本一本视频| 精品国产91亚洲一区二区三区www| 欧美电影免费提供在线观看| 国v精品久久久网| 西野翔中文久久精品国产| 美女毛片在线看| 一级特黄妇女高潮| 韩国19禁主播vip福利视频| 日韩欧美在线第一页| 极品少妇xxxx精品少妇偷拍| а√中文在线天堂精品| 国产香蕉视频在线看| 免费看黄色a级片| 国产不卡av在线免费观看| 91精品国产91久久久久久一区二区 | 91国产一区在线| 色欧美片视频在线观看在线视频| 亚欧成人精品| 极品国产人妖chinesets亚洲人妖| 嫩草研究院在线| 国产a级片网站| 亚洲精品免费av| 日韩一区在线视频| 狠狠色香婷婷久久亚洲精品| 国产专区综合网| 日韩精品二区| 亚洲高清影院| 日本在线观看网站| 激情五月俺来也| 国产一区二区三区高清视频| 免费91在线视频| 日韩欧美一二区| 亚洲成人动漫一区| caoporn国产一区二区| 综合激情婷婷| 欧美大片91| 男人天堂亚洲天堂 | 日韩欧美在线影院| 中文字幕一区二区三区精华液| 久草免费在线视频| 性生大片免费观看性| 日本中文字幕亚洲| 久久综合九九| 国产精品久久久久久久久久小说 | 精品欧美日韩在线| 日本亚洲欧洲色| 日韩中文字幕亚洲| 欧美xxxx老人做受| 精品女厕一区二区三区| 久久亚洲一区二区三区明星换脸 | 欧美www.| 91三级在线| 小明精品国产一区二区三区| 99免费视频观看| 裸体裸乳免费看| 久久久久资源| 91夜夜揉人人捏人人添红杏| 欧美成人免费在线观看| 亚洲黄色片在线观看| 日本va欧美va精品| 影院欧美亚洲| 黄色av一区| 欧美激情综合色综合啪啪| 久久99影视| 小香蕉视频在线| 性猛交ⅹ×××乱大交| 天堂…中文在线最新版在线| 欧美日韩激情四射| 伊人狠狠色丁香综合尤物| 欧美连裤袜在线视频| 亚洲在线久久| 免费网站在线观看视频| 久久精品人人做人人爽电影| 久久久久久久久中文字幕| 欧美性猛交xxxx免费看| 久久久久久久久久久久久夜| 欧美91福利在线观看|