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中文网其他相关文章!