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

IC容器中调用ic_cdk::spawn后panic,异步任务是否仍执行?

问题解答

问题1:在IC canister中使用ic_cdk::spawn启动异步任务后触发panic,会发生什么?

  • ic_cdk::spawn创建的是独立于当前执行上下文的异步任务,它会被加入canister的任务调度队列等待后续执行。
  • 当前函数触发的panic只会终止**当前正在处理的消息(比如这个update调用)**的执行流程,并且会回滚当前消息处理过程中产生的所有状态变更——包括刚刚通过spawn注册的任务也会被回滚,不会被调度执行。
  • 简单总结:当前panic会让spawn的任务直接“消失”,不会有后续执行机会。

问题2:给定代码中调用test函数时,是否会发起对test_2的异步调用?

不会,具体原因:

  1. ic_cdk::spawn仅把异步任务加入本地任务队列,而这个队列的变更属于当前update调用的状态一部分。
  2. 函数在spawn之后立刻触发了panic,这会导致整个test调用的所有状态变更被回滚,包括刚刚注册的spawn任务。
  3. 任务队列里没有了这个异步任务,自然不会执行到里面的ic_cdk::call,也就不会发起对test_2的调用。

补充:如果移除panic!("Panic at the disco!");这行代码,spawn的任务会在当前消息处理完成后被调度,此时才会发起对test_2的异步调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:52:16