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

如何在不使用await的情况下释放包装副作用的ValueTask?

无返回值ValueTask的复用标记方法

当你持有一个无返回值的ValueTask(非ValueTask<T>),且它已同步完成(IsCompletedSuccessfully为true)、尚未被await时,可通过以下方式告知运行时该实例已被使用,以便底层基于IValueTaskSource实现的资源被安全复用:

  • 调用valueTask.AsTask():该方法会完成对ValueTask的消费逻辑,无论它是基于普通Task还是IValueTaskSource实现,调用后原ValueTask即可被安全复用(若支持复用)。
  • 直接执行await valueTask;:即便ValueTask已同步完成,await操作也会正确标记它已被使用,且不会产生额外异步开销——同步完成的ValueTask在await时会直接执行后续代码路径。

注意:绝对不能直接丢弃未处理的ValueTask,尤其是当它基于IValueTaskSource实现时,会导致资源无法回收或复用,甚至引发后续使用时的异常。

内容的提问来源于stack exchange,提问作者Boris B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:04:52