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

JAC中spawn here与spawn -->两种walker启动方式的差异问询

JAC中spawn here与spawn -->的区别解析

核心差异

  • spawn here walker::walker_name;(同步启动)
    这种写法会让当前walker暂停执行,等待被启动的walker完全运行结束后才继续往下走。如果被启动的walker没有明确返回值,赋值结果就是NULL——这就是你代码里test1返回NULL的原因。

  • spawn --> walker::walker_name;(异步启动)
    这种写法不会阻塞当前walker的执行,被启动的walker会在后台并行运行。它的返回值是一个walker句柄列表,用来跟踪所有异步启动的walker实例。如果没有需要跟踪的有效句柄(比如你的mytest没有产生可返回的句柄内容),就会返回空列表[],对应你代码里test2的结果。

结合你的代码验证

看你提供的测试代码:

walker mytest {
    std.out("hello world");
}

walker init{
    root {
        test1 = spawn here walker::mytest;
        test2 = spawn --> walker::mytest;
        std.out(test1);
        std.out(test2);
    }
}
  • 执行spawn here时,mytest的std.out("hello world")会先跑完,才会给test1赋值NULL,再执行后续的打印。
  • 执行spawn -->时,mytest会被立刻调度启动,但当前init walker不会等它跑完,直接生成空句柄列表赋值给test2,然后执行打印——甚至有可能test2的打印会比mytest的hello world先输出,具体取决于JAC的调度机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:03:16