標籤:style blog http io ar color os 使用 sp
Task 在C#中表示一個非同步作業。
作為一個方法的傳回型別時通常與async同時出現;而async又與await正好是一對。
Task 執行個體可以用各種不同的方式建立。 最常見的方法是使用任務的 Factory 屬性檢索可用來建立用於多個用途的TaskFactory執行個體。 例如,要建立運行操作的 Task,可以使用工廠的StartNew方法:Task.Factory.StartNew(Action) ;.net 4.5又添加了Task.Run(Action) 想瞭解更多 請猛戳 這裡 有更多範例程式碼。
通常通過上面兩個方法執行個體的Task已經開始運行,但是它不一定是新起一個線程,而是去尋找閑置線程並在此閑置的線程上去運行。
static async Task T2() { var t1 = T1(); var t2 = Task.Run(delegate { for (int i = 1111; i < 2000; i++) { Console.WriteLine(i); } }); await t1; await t2; } static async Task T1() { await Task.Run(delegate { for (int i = 0; i < 1000; i++) { Console.WriteLine(i); } }); }
如上代碼,當我們直接調用T2方法的時候 運行到var t1=T1();時已經將T1裡面的任務加入到執行隊列中去;可能不會馬上執行,因為它還要去尋找閑置的線程。
運行到var t2=Task....(省略)時同樣只是將其中的任務加入到執行隊列中去,它們的任務可能是放在不同的線程中去啟動並執行。然後再通過await去等待確定它們都執行完成。
都完成後再回到主線程(主線程只是指T2方法執行的線程)中來;
下面其實跟Task就沒有直接關係了
圖片中的提示可以看出,一個非同步方法呼叫 在await Task 之前其實仍然是在進行同步啟動並執行(可能不是很明顯,但是我寫過測試確實如此);只有在遇到了await Task的時候再將啟動並執行任務非同步作業。
小結
我最討厭小結、總結什麼的了。
Task C#