非同步執行緒
前台執行緒/後台執行緒
預設前台執行緒
有執行緒的取消、完成、失敗通知等互動性操作
通過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...