C NutShell 第二十三章 任務並行

2021-09-29 13:13:53 字數 2420 閱讀 3841

1.指定狀態物件

static void main(string args)

static void go(object state)

2.taskcreationoptions

可以調整任務的執行方式。

longrunning:通知排程器為任務指定乙個執行緒

prefe***irness:會使任務排程器的排程順序盡可能和任務的開始順序一致

attachedtoparent:建立子任務

3.子任務

當乙個任務啟動另外乙個任務時,可以確定父子任務關係

父任務必須在所有子任務結束了之後才結束。而父任務結束時,子任務中的異常才向上丟擲

var task = task.factory.startnew(()=>

,taskcreationoptions.attachedtoparent);

});

1.等待乙個任務,可以使用wait或者訪問result

2.或者靜態方法,task.waitall等待所有任務,task.waitany等待任意乙個任務

task.waitall(task,task2);

task.waitany(task, task2);

通過在建立任務時傳入取消令牌,來取消任務。取消之後,會丟擲異常

cancellationtokensource source = new cancellationtokensource();

source.cancelafter(500);

var task = task.factory.startnew(()=>

, source.token);

1.continuewith方法將在乙個任務執行完畢之後立即執行乙個委託

var task = task.factory.startnew(()=>

).continuewith(ant=>

).continuewith(ant =>

);

2.在前面的任務結束、失敗、或取消後,延續的任務開始執行。引數是前面任務的引用。可以一直新增延續。

3.預設前導任務和延續會在不同的執行緒上執行,但是也可以設定為同一執行緒,需要指定選項taskcontinuationoptions.executesynchronously

4.使用前導任務的結果

var task = task.factory.startnew(()=>

).continuewith(ant=>

).continuewith(ant =>

);

5.延續任務可以查詢前導任務的exception屬性來確認前導任務是否執行失敗

6.呼叫wait可以重新丟擲前導任務的異常

7.或者分別為異常和正常的結果指定不同的延續

8.延續任務只有在所有子任務完成之後才會執行,子任務的所有異常都會封送到延續中

9.一般延續任務是無條件執行的,但是可以通過設定來決定延續是否執行。

var task = task.factory.startnew(() =>

).continuewith(ant =>

,taskcontinuationoptions.onlyonrantocompletion)

.continuewith(ant =>

);

上面的例子,one不會執行,two也不會執行,three會執行

notonrantocompletion:正常執行

notonfaulted:在錯誤的時候不取消

notoncanceled:在取消令牌時不取消

可以用或(|)組合

10.具有多個前導任務的延續任務

wnenall,whenany

var task = task.factory.startnew(() =>

);var task2 = task.factory.startnew(() =>

);task.whenall(task,task2).continuewith(ant =>

);

1.concurrentstack,concurrentqueue,concurrentbag都是用鍊錶實現的。list沒有併發集合版本。

var d = new concurrentdictionary();

for (int i = 0; i < 20; i++)

var d1 = new dictionary();

for (int i = 0; i < 20; i++)

}

2個**在功能上是等價的,但是在執行速度上是傳統的lock語句快。讀取不會有什麼明顯的差異。

第二十三天

1 使用 koa 搭建伺服器 const koa require koa 路由請求 context ctx 上下文 包含req和res ctx.body hello koa2 2 如何配置 koa 路由 const koa require koa 建立路由物件 const router requir...

UNPv1第二十三章 執行緒

在傳統的unix模型中,當乙個程序需要由另乙個實體執行某件事時,該程序派生 fork 乙個子程序,讓子程序去進行處理。unix下的大多數網路伺服器程式都是這麼編寫的,這在我們的併發服務程式例子中可以看出 父程序接收連線,派生子程序,子程序處理與客戶的互動。雖然這種模式很多年來使用的很好,但是fork...

Vue 第二十三章v on事件處理

1.目的,因為在做前端開發的時候需要進行原生事件處理,以下 是使用兩個不同的點選事件來觸發對應的內容 比如第乙個是演示獲取之前的按鈕上的內容,第二個是獲取事件屬性 事件處理 stop prevent once 單擊事件會繼續傳播 阻止單擊事件會繼續傳播 xiaotaozi網 小桃子網 點選事件將只會...