Task C#

來源:互聯網
上載者:User

標籤: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#

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.