基於任務的非同步模式 TAP

2021-09-08 04:15:50 字數 1018 閱讀 7369

.net 4.0為我們帶來了task的非同步,我們有以下三種方法建立task。

1,task.factory.startnew,比較常用。

2,task.run,是.net 4.5中增加的。

3,task.fromresult,如果結果是已計算,就可以使用這種方法來建立任務。

下面就以task.factory.startnew繼續來實現前面的那個例子,**如下。

1

///

2/// 使用task,task.factory.startnew,會建立新的執行緒

3///

4///

5///

6private

void button4_click(object sender, eventargs e)

7

22 });

23 }

view code

task相較threadpool執行緒池使用更簡單,而且支援執行緒的取消,完成和失敗通知等互動性操作,而這些是threadpool所沒有的。並且task是可以有返回值的。

async&await是.net 4.5新增的特性,

下面還是使用async&await實現一遍之前的例子,**如下。

1

///

2/// 使用async/await

3///

4///

5///

6private async void button5_click(object sender, eventargs e)

7

1213

public async task doworkasync()

14

24 }

view code

有以下疑問:

1,看起來使用了async,ui執行緒還是會阻塞?

2,使用async並沒有建立乙個新的執行緒?

基於任務的非同步程式設計模式(TAP)的錯誤處理

在前面講到了 基於任務的非同步程式設計模式 tap 但是如果呼叫非同步方法,沒有等待,那麼呼叫非同步方法的執行緒中使用傳統的try catch塊是不能捕獲到非同步方法中的異常。因為在非同步方法執行出現異常之前,已經執行完畢。throwafter方法是在一定延遲後丟擲乙個異常 private asyn...

基於事件的非同步模式。

由於乙個類可以不用顯示的啟動或者管理執行緒而有多執行緒的能力,因此通過這就提供了乙個簡單的手段來實現,基於事件的非同步模式 event based asynchronous pattern eap 它同時也具有以下特徵 可協調的退出模式。當工作執行緒完成時,可以安全的更新wpf或者windowfor...

基於事件的非同步程式設計模式

public class backgroundworker component 通常的使用方法如下 在dowork中新增乙個事件處理程式,在該事件處理程式中呼叫耗時的操作 呼叫 runworkerasync啟動才操作。如果想要得到當前的更新進度,在progresschanged事件處理程式中處理,如...