用過.net 非同步程式設計的同學都知道,比以前的多執行緒程式設計實現起來真的方便很多,今天把waitall和whenall這兩種程式設計方式回顧總結一下(當然waitany、whenany是一樣的操作)
1:waitall
這個方法在我理解看來,主要是為了解決多個不太相關的操作同步執行的話,耗時較多,這個方法可以使得他們非同步同時執行,然後當所有操作都完成以後,再去進行接下來的操作,talk is cheap,show you code!
舉個例子:
1var 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基礎上又做了一層包裝,看**就明白了
1var 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...