這段代碼展示了使用 C# 的 async
與 await
關鍵字來處理異步編程,讓程序能在等待操作完成時繼續執行其他代碼。以下是該代碼的分解與解釋:
Main
方法)public static void Main(string[] args) {
Console.WriteLine("Main Method Started......");
SomeMethod();
Console.WriteLine("Main Method End");
Console.ReadKey();
}
Main
方法是整個程序的入口。它首先輸出「Main Method Started......」。SomeMethod()
方法,但不會等待 SomeMethod
結束,會立刻執行下一行代碼。Main
方法輸出「Main Method End」,並等待用戶按下任意鍵後結束。SomeMethod
方法(包含 async
和 await
)public async static void SomeMethod() {
Console.WriteLine("Some Method Started......");
await Wait();
Console.WriteLine("Some Method End");
}
SomeMethod
是一個異步方法,因為包含 async
修飾詞。await Wait()
,這時程序會等待 Wait
方法完成,再繼續執行 Console.WriteLine("Some Method End")
。SomeMethod
被定義為 void
類型,這種異步 void
方法多用於事件處理,不推薦在一般方法中使用,因為它無法回傳任務狀態給呼叫端。Wait
方法(執行延遲)private static async Task Wait() {
await Task.Delay(TimeSpan.FromSeconds(10));
Console.WriteLine("\\\\n10 Seconds wait Completed\\\\n");
}
Wait
方法也是一個異步方法,返回類型為 Task
,可以用 await
來等待它完成。await Task.Delay(TimeSpan.FromSeconds(10));
會讓程序等待 10 秒再繼續,這行程式碼會讓異步操作進入非阻塞狀態,讓 SomeMethod
可以在等待時讓出控制權。Main
方法時,會立即輸出「Main Method Started......」。SomeMethod()
,並立即繼續執行 Console.WriteLine("Main Method End")
,所以不會等待 SomeMethod
完成。