0

0

c# C# 异步方法可以作为 Main 入口点吗

幻夢星雲

幻夢星雲

发布时间:2026-01-11 08:30:19

|

148人浏览过

|

来源于php中文网

原创

C# 7.2起支持async Main,合法签名仅四种:static async Task Main(string[] args)、static async Task Main(string[] args)、static async Task Main()、static async Task Main();不支持async void或非Task返回类型,因CLR需等待并获取退出码。

c# c# 异步方法可以作为 main 入口点吗

可以,C# 7.2 起就支持 async 入口点,但必须满足特定签名,否则编译失败。

async Main 方法的合法签名有哪些

C# 编译器只接受以下四种形式的 async Main,其他变体(比如带多个参数、返回 Task 以外类型)会报错 CS5001: Program does not contain a static 'Main' method suitable for an entry point

  • static async Task Main(string[] args)
  • static async Task Main(string[] args)
  • static async Task Main()
  • static async Task Main()

注意:voidasync void Main 不合法;Task 等非 int 或无返回值的 Task 也不行。

为什么不能用 async void Main

async void 是“火-and-forget”方法,无法被等待,运行时无法感知其完成状态。入口点若为 async void,进程可能在异步操作真正开始前就退出。

例如下面这段代码会直接退出,不打印任何内容:

static async void Main(string[] args)
{
    await Task.Delay(1000);
    Console.WriteLine("Done"); // 永远不会执行
}

这是因为 CLR 启动后调用 Main,看到是 void 就认为启动完成,立即终止进程。

神笔马良
神笔马良

神笔马良 - AI让剧本一键成片。

下载

返回 Task 的实际意义

和同步 int Main() 一样,Task Main() 的返回值会作为进程退出码(exit code)。这在脚本集成或 CI 环境中很关键:

  • 成功逻辑返回 0
  • 错误场景可返回非零值(如 12)供外部判断
  • CLR 会自动 await 该 Task,再把结果传给操作系统

示例:

static async Task Main(string[] args)
{
    try
    {
        await DownloadFileAsync("https://example.com/data.json");
        return 0;
    }
    catch (HttpRequestException)
    {
        Console.Error.WriteLine("Download failed");
        return 1;
    }
}

项目 SDK 和语言版本要求

必须满足两个条件才能启用 async Main

  • 项目文件中使用 netcoreapp3.1 或更高(.NET 5+ 更稳妥)
  • 至少为 7.2(显式指定或依赖 SDK 默认值)

如果用的是旧版 .NET Framework(如 4.8),即使装了新编译器,也不支持 —— 因为入口点机制由运行时实现,不是纯语法糖。

容易忽略的一点:某些 IDE(如老版本 Visual Studio)可能缓存项目属性,改完 .csproj 后需重启或清理 obj/ 目录才能生效。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

534

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

51

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

194

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

175

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

96

2025.11.27

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

78

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

46

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号