如果指定使用 異步 或 異步 修飾符,方法是異步方法,可以實現以下兩個函數。
? 清單異步方法可以使用 Await 或指定的 等待 懸掛點。 等待運算符通知編譯器異步方法不能繼續點的過去,直到等待的異步過程完成。 同時,控制權交還異步方法的調用方。
一個異步方法的備用在等待表達式的不構成從方法的退出,并且,finally 塊不會運行。
? 清單異步方法本身可以通過調用它的方法等待。
異步方法通常包含等待運算符的一個或多個匹配項,但是,請假等待表達式不會導致編譯器錯誤。 如果異步方法不會將等待運算符指示懸掛點,方法盡管"修飾符執行,一個同步方法。 編譯器會發出此類方法的警告。異步方法旨在成為非阻塞操作。 當等待的任務運行時,在異步方法的一個等待表達式不會阻止當前線程。 相反,該表達式注冊該方法的其余部分作為繼續并返回控制對異步方法的調用方。
異步和等待關鍵字不會導致其他線程創建。 因為異步方法本身并不會運行的線程,異步方法不需要多線程。 只有 + 當方法處于活動狀態,則方法在當前同步上下文中運行并使用在線程的時間。 可以使用 Task.Run 移動 CPU 工作移到后臺線程,但是,后臺線程不利于等待結果變得可用處理。
以異步編程的基于異步的方法優于于幾乎每個用例的現有方法。 具體而言,此方法比 IO 操作的 BackgroundWorker 好,因為代碼更為簡單的,因此無需防止爭用條件。 與 Task.Run的組合,異步編程的 CPU 操作的 BackgroundWorker 好,因為異步編程從 Task.Run 傳輸到線程池的工作分隔運行您的代碼以協調詳細信息。 ——MSDN
其實按照我的理解”async”標記的方法,告訴編譯器方法內有Await ,而當程序運行到Await 代碼塊的時候,將會作為異步處理,當異步處理完成后,繼續處理下面代碼。期間不會造成期阻塞線程以及UI無響應的情況。
1.普通示例
using System;using System.Threading;using System.Threading.Tasks;namespace Consoleapplication19{ class PRogram { static void Main(string[] args) { AsyncText(); Console.ReadLine(); } static async void AsyncText() { Console.WriteLine("--------------AsyncText Start------------"); await Task.Run(() => { Thread.Sleep(5000); Console.WriteLine("--------------AsyncText.....------------"); }); Console.WriteLine("--------------AsyncText End------------"); } }}
代碼效果
新聞熱點
疑難解答