C 多執行緒六之Task 任務 二

2021-09-08 20:26:37 字數 1714 閱讀 2971

前面介紹了task的由來,以及簡單的使用,包括開啟任務,處理任務的超時、異常、取消、以及如果獲取任務的返回值,在回去返回值之後,立即喚起新的執行緒處理返回值、且如果前面的任務發生異常,喚起任務如果有效的處理異常等關於task的知識。所以本文將介紹task更多的用法和特性.

一、如果通過乙個任務建立多個子任務.

1、task支援乙個任務,建立多個子任務,並且保持關聯.

static

void main(string

args)

);parenttask.start();

parenttask.continuewith(x =>

", re);

}});

console.writeline(

"主線程不會阻塞,它會繼續執行");

console.readkey();

//必須加這行**,因為task時執行緒池執行緒,屬於後台執行緒

}

//////

子任務一

/// static

intchildthreadone()

", 6

);

return6;

}//////

子任務一

二、關於task的資源釋放問題.

如果你看過task的原始碼,你會發現下面這個有趣的問題:

ok,你會想它想釋放什麼呢?

沒錯,當task任務,指定了taskcontinuationoptions列舉狀態,且指定的值如下:

那麼,直接return,什麼資源釋放操作都不做.

如果任務沒有完成,就呼叫dispose方法,那麼直接拋異常,如果完成了,它就釋放了manualreseteventslim訊號量(後面的文章會介紹).所以如果你在task中使用了其它的一些非託管資源,那麼最好在**裡自己手動釋放,在使用完之後。或者自己實現了task的派生類,把需要用的非託管資源加進去,然後在使用完派生類之後,呼叫dispose方法.

三、關於task的幾個常用屬性

1、id屬性,每個task物件都有乙個id屬性,全域性唯一,且每次建立新的任務,這個值都會遞增1.

2、taskstatus狀態

//

//摘要:

//表示 system.threading.tasks.task 的生命週期中的當前階段。

public

enum

taskstatus

faulted(任務出錯).

這裡需要注意乙個特殊的狀態waitingforactivation

當使用task物件的continuewith的task物件處理改狀態,意味者該task任務的排程由任務基礎結構控制.也就是該任務的排程只有當前面的任務執行完之後,由clr發起執行呼叫.

C 多執行緒任務 Task

公司的自動化測試平台是 c 語言的,因此有幸學習下 c 搜尋到的是這篇文章,是乙個 的,由淺入深。主要講的是task,裡面也有demo,非常詳細。thread預設為前台執行緒,也可以設定為後台執行緒,主程式必須等待執行緒執行完畢後才可退出程式。開啟乙個新執行緒,執行緒不做任何操作,都要消耗1m左右的...

C 多執行緒任務同步

首先建立全域性變數 int count 0 object monitorobject new object 建立兩個任務 public void task01 public void task02 控制台程式啟動多執行緒,並列印count的值 task t1 task.run task01 task...

C 多執行緒之thread與task

最近有個用c 開發的winform軟體,需要呼叫matlab匯出的dll檔案。最開始把dll中類的初始化放在了主窗體的建構函式裡面,結果軟體開啟30多秒才顯示介面。由於dll不是本人寫的,沒法改,只能在c 程式上想辦法。兩個方案 使用timer,在主窗體的load事件裡面觸發timer,將初始化的 ...