Console 应用中的异步 Main 方法
在尝试将控制台应用程序中的 Main 方法设为异步时,可能会遇到错误:“无法在控制台应用程序的 Main 方法上指定 'async' 修饰符”。
编译器限制
历史上,Visual Studio 编译器限制了在 Main 方法上使用 async 修饰符。这是为了防止异步执行与控制台程序的自然同步行为冲突。
对异步 Main 的支持
但是,从 Visual Studio 2017 Update 3 (15.3) 开始,C# 支持异步 Main 方法,只要它们返回 Task 或 Task
<code class="language-csharp">class Program { static async Task Main(string[] args) { // 异步代码在此处 } }</code>
理解行为
在异步 Main 方法中,“await” 关键字指示可等待对象(例如,任务)在完成时完成方法,之后方法返回。但是,在控制台应用程序中,Main 方法的返回将退出程序。
避免程序退出
为了防止程序退出,必须为 Main 方法提供一个与异步兼容的上下文。此上下文在异步操作运行时保持程序处于活动状态。
上下文选项
阻塞主线程
另一种方法是阻塞主控制台线程,直到异步工作完成:
<code class="language-csharp">class Program { static void Main(string[] args) { MainAsync(args).GetAwaiter().GetResult(); } static async Task MainAsync(string[] args) { // 异步代码在此处 } }</code>
注意:GetAwaiter().GetResult() 避免了使用 Wait() 或 Result() 时发生的 AggregateException 包装。
以上是我可以使控制台应用程序的主要方法异步吗?的详细内容。更多信息请关注PHP中文网其他相关文章!