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

如何从JobRunR Job中获取任务执行的返回值?

JobRunR任务返回值获取方案

先修正任务提交代码

你当前的任务提交写法有问题,lambda里不能直接内部赋值,应该让lambda直接返回任务方法的结果,正确代码如下:

JobId jobId = BackgroundJob.enqueue(() -> this.controller.generatePreview(date));

两种获取返回值的方式

1. 同步等待获取(适合需要阻塞等待结果的场景)

通过JobScheduler获取Job对象,等待任务完成后直接读取结果:

// 获取任务实例
Job job = JobRunR.getJobScheduler().getJobById(jobId);

// 可选:等待任务完成,设置超时时间(比如5分钟)
job.awaitUntilCompleted(Duration.ofMinutes(5));

// 确认任务成功后强转获取结果
if (job.getJobState() == JobState.SUCCEEDED) {
    String result = (String) job.getResult();
    // 处理返回值
}

2. 异步监听获取(适合不阻塞主线程的场景)

利用JobRunR的回调机制,在任务完成或失败时触发逻辑:

BackgroundJob.enqueue(() -> this.controller.generatePreview(date))
        .onCompleted(job -> {
            // 任务成功时获取结果
            String result = (String) job.getResult();
            // 这里写结果处理逻辑,比如存储、通知等
        })
        .onFailed(job -> {
            // 任务失败时的处理逻辑
            Throwable exception = job.getException();
        });

注意事项

  • 确保generatePreview方法所在的Bean是可序列化的(Spring Bean默认支持),否则任务序列化会失败。
  • 强转返回值时要注意类型匹配,避免ClassCastException,可结合instanceof判断。
  • 同步等待时必须设置合理超时,防止主线程长期阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 20:02:35