日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 背景

揭秘:

  在前面的章節介紹過,Task出現之前,微軟的多線程處理方式有:Thread→ThreadPool→委托的異步調用,雖然也可以基本業務需要的多線程場景,但它們在多個線程的等待處理方面、資源占用方面、線程延續和阻塞方面、線程的取消方面等都顯得比較笨拙,在面對復雜的業務場景下,顯得有點捉襟見肘了。

  正是在這種背景下,Task應運而生。

  Task是微軟在.Net 4.0時代推出來的,也是微軟極力推薦的一種多線程的處理方式,Task看起來像一個Thread,實際上,它是在ThreadPool的基礎上進行的封裝,Task的控制和擴展性很強,在線程的延續、阻塞、取消、超時等方面遠勝于Thread和ThreadPool。

?

二. Task的4種啟動方式

概要:?

  Task的啟動有4種方式,其中3種異步啟動開啟一個新線程,1種同步啟動的方式(有點和委托類似,BeginInvoke異步啟動,Invoke同步啟動),分別是:實例化的方式+Start方法啟動、Task下Run方法啟動、TaskFactory工廠的StartNew方法啟動、Task下的同步方法RunSynchronously 啟動。

1.?實例化的方式啟動,調用Start方法

?  Task的構造函數中的參數是Action委托(注:不是Action<>多個重載),所以直接使用 ()=>{ ? }的方式傳參,簡潔明了,然后調用Start方式啟動。

2. 調用Task類下的靜態方法Run,進行啟動

?  使用該方式啟動,更加簡潔,不需要實例化,也不需要調用Start方法,Run方法直接通過Action委托的方式進行傳參即可(即: ?()=>{} )。

3.?TaskFactory工廠啟動

?  使用TaskFactory工廠的StartNew方法啟動,其中TaskFactory工廠可以直接實例化,或者 Task.Factory (推薦)。

?

4.?實例化方式RunSynchronously同步啟動

?  Task實例化的方式,然后調用同步方法RunSynchronously ,進行線程啟動。(PS: 類似委托開啟線程,BeginInvoke是異步,而Invoke是同步)

?

三. Task的線程等待和延續

揭秘:

  線程等待和延續通常情況放在一起來說,在同步方法中,即在單線程中,業務代碼塊按照從上往下的順序執行,下面的代碼塊必須要等上面的代碼塊執行完畢后才能繼續執行,這本身就是一種等待和延續,只不過是單線程內的等待和延續。

  同理,來到多線程領域,這里的等待就不單單局限于代碼塊之間的等待和延續了,而是上升到某個線程 要等待 另外一個線程執行完畢后方能執行,這里特別說明一下,前面的章節提到線程等待基本上都是主線程在等子線程,當然,完全可能是子線程之間的相互等待和延續(實際上,這種情況更多)。

  Task下的線程等待和延續主要以下幾類:

  ①. Wait:針對單個Task的實例,可以task1.wait進行線程等待. ?<Task的實例方法>

  ②.?WaitAny:執行的線程等待其中任何一個線程執行完畢即可執行(如果主線程執行,則卡主線程) ?<Task的靜態方法>

  ③.?WaitAll:執行的線程等待其中所有線程執行完畢方可執行(如果主線程執行,則卡主線程) ? ? ? <Task的靜態方法>

  ④.?WhenAny:與下面ContinueWith配合執行,當傳入的線程中任何一個線程執行完畢,繼續執行ContinueWith中的任務(屬于開啟新線程,不卡主線程) ? <Task的靜態方法>

  ⑤.?WhenAll:與下面ContinueWith配合執行,當傳入的線程中所有線程執行完畢,繼續執行ContinueWith中的任務(屬于開啟新線程,不卡主線程) ? ? <Task的靜態方法>

  ⑥.?ContinueWith:和上面WhenAny和WhenAll配合使用 ? ?<Task的實例方法>

1.?WaitAny(執行的線程等待其中任何一個線程執行完畢即可執行)

?  這里給出線程等待加入集合中的代碼,下面的線程等待通用這一部分代碼,將不再列出。

2.?WaitAll(執行的線程等待其中所有線程執行完畢方可執行)

?

3.?WhenAny+ContinueWith

?   當其中一個線程執行完成后,新開啟了一個線程執行,繼續執行新業務,所以執行過程中,不卡主線程。

4.?WhenAll+ContinueWith

?  當其中所有線程執行完成后,新開啟了一個線程執行,繼續執行新業務,所以執行過程中,不卡主線程。

四. TaskFactory的線程等待

說明:?TaskFactory可以開啟線程,當然也對應的線程的等待和延續。

  ①:ContinueWhenAny:等價于Task的WhenAny+ContinueWith

  ②:ContinueWhenAll:等價于Task的WhenAll+ContinueWith

1.?ContinueWhenAny

?

2.?ContinueWhenAll

?

?

總結

以上是生活随笔為你收集整理的第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费无遮挡无码永久在线观看视频 | 久草综合在线视频 | 欧美日韩大片在线观看 | 第一色综合 | 久久午夜国产 | 亚洲社区在线观看 | 国产永久在线 | 色综合久久久久 | 中国18videosex极品 | 日韩在线中文字幕视频 | 欧美极品在线视频 | 成人亚洲玉足脚交系列 | 免费一区二区三区视频在线 | 欧美图片一区 | 在线观看欧美成人 | 朝桐光在线视频 | 亚洲伊人精品 | 亚洲色图 一区二区 | 欧美在线看片 | 在线观看精品一区 | 久久久久久久久久免费视频 | 国产情侣av在线 | 成熟人妻av无码专区 | 少妇无内裤下蹲露大唇视频 | 天天摸天天看 | 成人在线激情 | 国产日韩欧美久久 | 91色网站| 在线看免费 | 男人午夜视频 | 日本二三区 | 色呦呦免费 | 狼色网| 91久久久久久 | 婷综合| 一级黄色性视频 | 美女被日网站 | 亚洲操一操 | 好吊色视频在线观看 | 夜色视频在线观看 | 日韩大片免费观看视频播放 | 日韩和的一区二区 | 伊人中文字幕 | 中文字幕黄色 | 国产精品天美传媒沈樵 | 麻豆传媒在线观看视频 | 中文字幕av一区二区三区人妻少妇 | 欧美大片网站 | 毛片在线看片 | 天堂8在线视频 | 欧美亚洲一区二区在线观看 | 美女黄色在线观看 | 超碰人人搞 | www.亚洲天堂.com | 国产剧情一区在线 | 国产精品久久久久久久天堂 | 亚洲女成人图区 | 朝鲜美女黑毛bbw | 免费看黄色a级片 | 北条麻妃二三区 | 波多野结衣在线影院 | 一级久久久久久 | 高贵麻麻被调教成玩物 | 国产理论视频在线观看 | 在线观看视频 | 日韩毛片无码永久免费看 | 中文字幕在线第一页 | 国产精品v | 国产自产 | 海量av | 亚洲久操| 亚洲成人精品一区二区三区 | 国产精品一区二区久久久 | 尤物视频在线观看国产 | 国产极品美女高潮无套在线观看 | 中文字幕高清一区 | 日韩在线视频播放 | 免费成人美女在线观看 | 男人天堂导航 | 骚婷婷| 亚洲无圣光| 精品一区电影国产 | 高清日韩一区二区 | 黄色免费在线网站 | 好男人www在线视频 我们的2018在线观看免费高清 | 韩国伦理片在线看 | 亚洲精品一级二级 | 91夫妻视频| 久操色| 久久精品电影网 | 美日韩一区 | 蜜桃臀av在线 | 一级黄色网 | 秋霞午夜视频 | 伊人福利视频 | 国产精品第6页 | 一区二区国产在线观看 | 久久一区国产 | 国色天香网站 |