C 之Thread類和async await使用

2021-10-03 14:38:31 字數 1937 閱讀 5261

.稍微了解程式語言的童鞋都知道執行緒,而且大部分語言執行緒的表示方式都是thread,執行緒的出現豐富了程式的多樣性,從單一執行緒變成多執行緒不僅是功能的增加,而且還會出現很多的方法。

廢話不多說,看例子

using system;

using system.threading;

class

program

private

static

intthread_test()

}

列印如下:

主線程開始

主線程結束

thread_test執行緒開始

thread_test執行緒結束

這個只是在主線程的基礎上開闢了乙個新的執行緒,主線程並不能控制新開的執行緒,也不知道新執行緒的結果,而是雙方各自執行,沒有關係;

這就造成乙個問題,萬一主線程要知道新執行緒有沒有執行完或者需要知道新執行緒的返回結果呢?thread類是不能實現的,於是乎,微軟推出了乙個task類,task類是繼承自thread類的。

嘗試重寫上面的例子

using system;

using system.threading;

using system.threading.task;

class

program

private

static

async task<

int>

thread_test()

);return result;

}

執行結果為

主線程開始

執行緒開始

執行緒結束

result=

1主線程結束

可以看到與thread不同的是,當程式遇到await關鍵字後,會自動開啟乙個執行緒,如果這個執行緒有返回值也是可以收到的

.目前c#5.0以上就支援async和await關鍵字,thread類用的少了,況且async用法比thread更靈活。

設想:如果開啟兩個或兩個以上的執行緒,那這兩個或兩個以上的執行緒怎麼管控?目前有task類兩個靜態方法來管控,考慮以下**

using system;

using system.threading;

using system.threading.task;

class

program

; task.

waitall

(task)

;

console.

writeline

("result_1="

+ result_1.result)

; console.

writeline

("result_2="

+ result_2.result)

; console.

writeline

("主線程結束");

console.

readline()

;}private

static

async task<

int>

thread_test

(int i));

return result;

}

這個是同步等待:

waitall()關鍵字是等待任務全部完成,才繼續執行

waitany()關鍵字是等待任 一task 完成,才繼續執行

當然還有非同步等待:

whenall() whenany()關鍵字是非同步等待集合內的 task 都完成

注意:async和await要配合task使用,不然可能會報錯。

C 執行緒Thread類

在system.threading 命名空間下,包含了用於建立和控制線程的thread 類。對執行緒的常用操作有 啟動執行緒 終止執行緒 合併執行緒和讓執行緒休眠等。在使用執行緒前,首先要建立乙個執行緒。其一般形式為 thread t new thread enterpoint 其中enterpoi...

C 執行緒類Thread初步

net 基礎類庫的 system.threading 命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread 類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹 threa...

C 執行緒類Thread初步

net 基礎類庫的 system.threading 命名空間提供了大量的類和介面支援多執行緒。這個命名空間有很多的類。system.threading.thread 類是建立並控制線程,設定其優先順序並獲取其狀態最為常用的類。他有很多的方法,在這裡我們將就比較常用和重要的方法做一下介紹 threa...