gpt4 book ai didi

spring - Spring @Async取消并开始吗?

转载 作者:行者123 更新时间:2023-12-01 15:39:36 25 4
gpt4 key购买 nike

我有一个spring MVC应用程序,用户可以在其中通过单击按钮开始生成报告。此过程可能需要几分钟〜10-20分钟。
我在服务调用周围使用springs @Async批注,以便异步生成报告。当我向用户弹出一条消息时,指示作业当前正在运行。
现在,我想做的是,如果另一个用户(管理员)可以通过按钮启动报告生成,该按钮应取消/停止当前运行的@Async任务并重新启动新任务。
为此,我将

.. ..
future = getCurrentTask(id); // returns the current task for given report id
if (!future.isDone())
future.cancel(true);

service.generateReport(id);

如何使将来的取消任务杀死所有正在运行的线程时使“service.generateReport”等待?
根据文档,在我调用future.cancel(true)之后,isDone将返回true,而isCancelled将返回true。因此,无法知道该作业实际上已被取消。

我只能在取消或完成旧报表后才开始生成新报表,以免弄脏数据。

最佳答案

documentationcancel()方法开始,

如果此方法返回true,则随后对isCancelled()的调用将始终返回true。

试试这个。

future = getCurrentTask(id); // returns the current task for given report id
if (!future.isDone()){
boolean terminatedImmediately=future.cancel(true);
if(terminatedImmediately)
service.generateReport(id);
else
//Inform user existing job couldn't be stopped.And to try again later
}

关于spring - Spring @Async取消并开始吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com