Task C#


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的時候再將運行的任務異步操作。

 

小結

    我最討厭小結、總結什么的了。


免責聲明!

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



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