task 異步 進程與線程的區別


用Wait方法(會以同步的方式來執行),不用Wait則會以異步的方式來執行

要在主線程中等待后台線程執行完畢,可以使用Wait方法(會以同步的方式來執行)。不用Wait則會以異步的方式來執行。

Task.Run的跟Task.Factory.StarNew和new Task相差不多,不同的是前兩種是放進線程池立即執行,而Task.Run則是等線程池空閑后在后台線程執行。

通過task.Result可以取到返回值,若取值的時候,后台線程還沒執行完,則會等待其執行完畢(會以同步的方式來執行)!

Run方法只接受無參的Action和Func委托,另外兩個接受一個object類型的參數。

它們都可以調用Wait方法來阻塞當前線程,還可以通過Task.Result來獲取返回值,當然它也會阻塞當前線程。

public class Task<TResult> : System.Threading.Tasks.Task

1、Task.Wait

task1.Wait();就是等待任務執行(task1)完成,task1的狀態變為Completed。

2、Task.WaitAll

看字面意思就知道,就是等待所有的任務都執行完成:

 {
Task.WaitAll(task,task2,task3...N) Console.WriteLine("All task finished!"); }

即當task,task2,task3…N全部任務都執行完成之后才會往下執行代碼(打印出:“All task finished!”)

3、Task.WaitAny

這個用發同Task.WaitAll,就是等待任何一個任務完成就繼續向下執行,將上面的代碼WaitAll替換為WaitAny

 {
Task.WaitAny(task,task2,task3...N) Console.WriteLine("Any task finished!"); }

即當task,task2,task3…N任意一個任務都執行完成之后就會往下執行代碼(打印出:” Any task finished!”)

4、Task.ContinueWith

就是在第一個Task完成后自動啟動下一個Task,實現Task的延續

 

多線程的意義在於一個應用程序中,有多個執行部分可以同時執行;對於比較耗時的操作(例如io,數據庫操作),或者等待響應(如WCF通信)的操作,可以單獨開啟后台線程來執行,這樣主線程就不會阻塞,可以繼續往下執行;等到后台線程執行完畢,再通知主線程,然后做出對應操作!

 

來自於:https://www.cnblogs.com/doforfuture/p/6293926.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM