You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TaskMethodAsync()与_ = TaskMethodAsync()两种写法有什么区别?

异步代码两种调用写法的核心区别

这两种写法都属于不需要等待异步方法执行完成、也不需要持有返回Task对象的「发射后不管」调用场景,核心区别如下:

  • 编译器警告表现不同
    直接调用TaskMethodAsync()时,编译器会检测到你未等待异步任务、也未使用返回的Task对象,会抛出CS4014警告,提示你可能遗漏了await关键字。
    用_ = TaskMethodAsync()时,_是C#的弃元符号,相当于明确告知编译器你主动放弃使用返回的Task对象,不需要触发相关提醒,可以直接消除CS4014警告,不需要额外添加警告抑制配置。
  • 代码可读性不同
    直接写TaskMethodAsync()时,其他开发者无法判断这是你故意设计的发射后不管逻辑,还是不小心漏写了await,容易产生代码误解。
    用_ = TaskMethodAsync()可以明确传递出「主动放弃返回值、不需要等待执行」的开发意图,可读性更高,也符合常规的代码规范。
  • 运行时逻辑完全一致
    两种写法在运行时没有任何差异,都没有持有异步方法返回的Task对象。如果异步方法内部抛出未捕获的异常,都会被封装到Task对象中,在部分.NET版本中如果异常未被观察,可能触发全局未处理任务异常事件,极端情况下会导致进程崩溃。弃元写法只是消除了编译器警告,不会改变运行时的异常处理逻辑。

注意:如果确实需要使用发射后不管的异步调用,建议优先选择弃元写法,同时一定要在异步方法内部做好完整的异常捕获,避免出现未观察异常导致程序异常退出。

内容的提问来源于stack exchange,提问作者Kurris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:48:04