C#控制台應用程序中的異步編程:理解async
修飾符
在異步編程中,async
修飾符表示方法將與其他代碼並發運行。然而,在控制台應用程序中,Main
方法不能定義為async
,這給希望使程序異步的開發者帶來了挑戰。
本文深入探討了這個問題,並探討了在控制台應用程序中實現異步行為的替代方法。
控制台應用程序中的async
修飾符
在Visual Studio 2012中,禁止將Main
方法定義為async
。然而,在Visual Studio 2017 Update 3 (15.3)及更高版本中,只要返回Task
或Task<T>
,語言現在支持async
Main
方法。這允許開發者編寫如下代碼:
<code class="language-csharp">class Program { static async Task Main(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
這種方法似乎阻塞了主線程,類似於使用GetAwaiter().GetResult()
。但是,在發布C# 7.1的官方語言規範之前,這種行為仍然是一個假設。
異步控制台應用程序的替代方法
當async
Main
方法不可行時,開發者可以採用以下替代方法之一:
async
兼容的自定義“主循環”。此循環充當異步方法的容器。 <code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { Bootstrapper bs = new Bootstrapper(); var list = await bs.GetList(); } }</code>
通過使用GetAwaiter().GetResult()
而不是Wait()
或Result
,開發者可以避免使用這些方法時發生的AggregateException
包裝。
總而言之,雖然async
Main
方法為異步控制台應用程序提供了一種更直接的方法,但對於舊版本的Visual Studio或當async
Main
方法不適合特定實現時,可以使用替代方法。
以上是如何在C#控制台應用程序中實現異步編程?的詳細內容。更多資訊請關注PHP中文網其他相關文章!