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

为何未await Swift的async let任务会抛出CancellationError?

为什么不await async let创建的任务会被取消?

这本质是Swift并发模型里父子任务的生命周期绑定规则在起作用:

  • 用async let声明任务时,会创建一个依附于当前父任务的子任务。这个子任务的存活完全依赖父任务——只要父任务执行完成(比如当前的同步代码段跑完、函数返回),Swift并发运行时会自动取消所有还没完成的子任务,这就是你看到CancellationError的原因。
  • 而用await ViewModel().test()时,父任务会主动暂停,等待这个异步任务执行完毕后再继续。父任务不会提前结束,子任务自然能正常跑完,不会被取消。

结合你的场景来看:主线程的父任务调用async let后,没做await就继续执行后续逻辑,很快父任务就走完了,这时候后台Actor里的test()还没执行完成,就被并发运行时强制取消了。而使用await时,父任务会一直等待test()执行完毕,所以不会触发取消逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:35:59