用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