多執行緒和非同步

2021-10-17 14:37:24 字數 4700 閱讀 5179

非同步執行緒

前台執行緒/後台執行緒

預設前台執行緒

有執行緒的取消、完成、失敗通知等互動性操作

通過jion阻塞,達到執行緒執行的先後次序

預設後台執行緒

無線程的取消、完成、失敗通知等互動性操作

可以減少每次建立執行緒的開銷

static

void

main

(string

args)

"主線程執行完畢!");

console.

read()

;}static

void

getthreadpool

(object index)個")

;}

返回

非同步執行,第0個2021/01/26 15:37:49

非同步執行,第2個2021/01/26 15:37:49

非同步執行,第7個2021/01/26 15:37:49

非同步執行,第8個2021/01/26 15:37:49

非同步執行,第9個2021/01/26 15:37:49

非同步執行,第1個2021/01/26 15:37:49

非同步執行,第6個2021/01/26 15:37:49

非同步執行,第4個2021/01/26 15:37:49

非同步執行,第3個2021/01/26 15:37:49

非同步執行,第5個2021/01/26 15:37:49

可以通過setmaxthreads來設定一次性最大建立多少個執行緒,如max為8,上面就會分兩次返回結果的,但max值不能小於當前伺服器最低的執行緒數,也可以設定setminthreads數來設定當前最低執行緒數,同樣不能低於伺服器實際最低執行緒數

threadpool.

setmaxthreads(8

,8);

返回

非同步執行,第3個2021/01/26 15:41:02

非同步執行,第2個2021/01/26 15:41:02

非同步執行,第1個2021/01/26 15:41:02

非同步執行,第0個2021/01/26 15:41:02

非同步執行,第5個2021/01/26 15:41:02

非同步執行,第6個2021/01/26 15:41:02

非同步執行,第4個2021/01/26 15:41:02

非同步執行,第7個2021/01/26 15:41:02

非同步執行,第8個2021/01/26 15:41:03

非同步執行,第9個2021/01/26 15:41:03

task task1 =

newtask((

)=>);

task1.

start()

;task task2 = task.factory.

startnew((

)=>);

task task3 = task.

run(()

=>

);

static

void

main

(string

args));

task.

start()

; task.

continuewith

(t =

>")

;});

console.

writeline

($"非同步開始");

thread.

sleep(5

*1000);

console.

read()

;}

返回結果

非同步開始

非同步執行

非同步完成,123

擴充套件還可以使用

task.

whenall

(task1, task2)

.continuewith

((t)

=>);

task.

whenany

(task1, task2)

.continuewith

((t)

=>

);

正常**

static

void

main

(string

args)

);

console.

writeline

($"主線程執行開始!");

"主線程執行完畢!");

console.

read()

;}static task<

string

>

getawaittask

(int nms,

string index)個")

;return $"ceshiyixia";}

);console.

writeline

($"非同步開始,第個");

return task;

}

返回結果

非同步開始,第1個2021/01/26 11:17:00

非同步開始,第2個2021/01/26 11:17:00

非同步開始,第3個2021/01/26 11:17:00

非同步開始,第4個2021/01/26 11:17:00

主線程執行開始!2021/01/26 11:17:00

非同步執行,第1個2021/01/26 11:17:01

非同步執行,第3個2021/01/26 11:17:01

非同步執行,第4個2021/01/26 11:17:01

非同步執行,第2個2021/01/26 11:17:02

增加waitall後,返回

非同步開始,第1個2021/01/26 11:17:49

非同步開始,第2個2021/01/26 11:17:49

非同步開始,第3個2021/01/26 11:17:49

非同步開始,第4個2021/01/26 11:17:49

非同步執行,第1個2021/01/26 11:17:50

非同步執行,第3個2021/01/26 11:17:50

非同步執行,第4個2021/01/26 11:17:50

非同步執行,第2個2021/01/26 11:17:51

主線程執行開始!2021/01/26 11:17:51

增加waitany後

task.

waitany

(new

task

);

返回

非同步開始,第1個2021/01/26 11:18:22

非同步開始,第2個2021/01/26 11:18:22

非同步開始,第3個2021/01/26 11:18:22

非同步開始,第4個2021/01/26 11:18:22

非同步執行,第1個2021/01/26 11:18:23

主線程執行開始!2021/01/26 11:18:23

非同步執行,第3個2021/01/26 11:18:23

非同步執行,第4個2021/01/26 11:18:23

非同步執行,第2個2021/01/26 11:18:24

static

void

main

(string

args)

async

static task<

string

>

getawaittask

(int nms,

string index)個")

; thread.

sleep

(nms*

1000);

return $"ceshiyixia";}

);console.

writeline

($"非同步開始,第個");

return task;

}

返回結果

system.threading.tasks.task`1[system.string]

system.threading.tasks.task`1[system.string]

system.threading.tasks.task`1[system.string]

system.threading.tasks.task`1[system.string]

主線程非同步開始

非同步執行,第1個2021/01/26 10:54:09

非同步執行,第3個2021/01/26 10:54:09

非同步執行,第2個2021/01/26 10:54:09

非同步執行,第4個2021/01/26 10:54:09

非同步開始,第1個2021/01/26 10:54:10

非同步開始,第3個2021/01/26 10:54:10

非同步開始,第4個2021/01/26 10:54:10

非同步開始,第2個2021/01/26 10:54:11

同樣可以通過getawaittask(1,「1」).result的方式,阻塞,按順序返回;

多執行緒和非同步

c 中非同步和多執行緒的區別是什麼呢?非同步和多執行緒兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為非同步和多執行緒是等同的概念。但是,非同步和多執行緒還是有一些區別的。而這些區別造成了使用非同步和多執行緒的時機的區別。所有的程式最終都會由計算機硬體來執行,所...

多執行緒和非同步處理

多執行緒 有兩種方式實現多執行緒,一種是繼承thread類,一種是實現runnable介面 繼承thread demo class mythread extends thread override public void run catch interruptedexception e 啟動執行緒 ...

關於多執行緒和非同步

計算密集型工作,採用多執行緒。io密集型工作,採用非同步機制。多執行緒 新開乙個執行緒執行程式 private void btnmutilthread click object sender,eventargs e public void dosomething 非同步執行程式 減少占有cpu dm...