WaitAll 和 WhenAll 的使用及區別

2021-09-08 05:21:41 字數 1759 閱讀 2434

用過.net 非同步程式設計的同學都知道,比以前的多執行緒程式設計實現起來真的方便很多,今天把waitall和whenall這兩種程式設計方式回顧總結一下(當然waitany、whenany是一樣的操作)

1:waitall

這個方法在我理解看來,主要是為了解決多個不太相關的操作同步執行的話,耗時較多,這個方法可以使得他們非同步同時執行,然後當所有操作都完成以後,再去進行接下來的操作,talk is cheap,show you code!

舉個例子:

1

var response1 = new

pricedataresponse();

2var response2 = new

pricedataresponse();34

//定義兩個非同步任務 task1,task2

5 task task1 = task.factory.startnew(() =>6);

910 task task2 = task.factory.startnew(() =>

11);

1415

//等待兩個任務執行完成(同時執行)

16task.waitall(task1, task2);

1718

//執行完以後,再進行以下操作

19if

(response1.prices.any())

2023

if(response2.prices.any())

24

也就是說,task1 和  task2 兩個任務在定義之後就已經馬不停蹄的在子執行緒中執行了,task.waitall 是乙個等待的過程,引數就是task引數,一旦全部執行完畢了,就繼續往下執行,這裡是阻塞的,還是比較好理解的。

這樣的話waitany就很好理解了,就是引數裡面的task 有任意乙個執行完成,就繼續執行後面的邏輯

2:whenall

whenall其實跟waitall是為了實現一樣的功能,只是在waitall基礎上又做了一層包裝,看**就明白了

1

var response1 = new

pricedataresponse();

2var response2 = new

pricedataresponse();34

//定義兩個非同步任務 task1,task2

5 task task1 = task.factory.startnew(() =>6);

910 task task2 = task.factory.startnew(() =>

11);

1415

//等待兩個任務執行完成(同時執行)

1617 task.whenall(task1, task2).continuewith(p =>

1823

if(response2.prices.any())

2427

return

null

;28 }, taskcontinuationoptions.onlyonrantocompletion);

功能上與waitall 是一樣,意思就是在兩個非同步結束了以後,再繼續做 continuewith 裡面的處理這裡的 p 相當於是task,如果前面定義的task有返回值,那麼這裡可以用p.result來取值

whenany 是一樣的,任意乙個完成就執行後面**

WaitAll 和 WhenAll 的使用及區別

用過.net 非同步程式設計的同學都知道,比以前的多執行緒程式設計實現起來真的方便很多,今天把waitall和whenall這兩種程式設計方式回顧總結一下 當然waitany whenany是一樣的操作 1 waitall 這個方法在我理解看來,主要是為了解決多個不太相關的操作同步執行的話,耗時較多...

和 區別和聯絡, 和 區別和聯絡

和 區別和聯絡,和 區別和聯絡,實際專案中,什麼情況用哪種?首先,和 的聯絡 共同點 和 都可以用作 邏輯與 運算子,都是雙目運算子。具體要看使用時的具體條件來決定。無論使用哪種運算子,對最終的運算結果都沒有影響。情況1 當上述的運算元是boolean型別變數時,和 都可以用作邏輯與運算子。情況2 ...

rpx和樣式和class和flex

5 style 靜態的樣式統一寫到 class 中。style 接收動態的樣式,在執行時會進行解析,請盡量避免將靜態的樣式寫進 style 中,以免影響渲染速度。例 6 class 用於指定樣式規則,其屬性值是樣式規則中類選擇器名 樣式類名 的集合,樣式類名不需要帶上.樣式類名之間用空格分隔。關於f...