弹簧取消@Async任务
我希望能够取消一个用注释标记的方法。@Async
我有一个用注释标记的Spring方法。此方法执行一些计算,并最终返回结果。我看到的所有示例都建议使用该类返回此 Future。@Async
AsyncResult
@Async
public Future<String> run() {
// ... Computation. Minutes pass ...
return new AsyncResult<String>("Result");
}
我通过以下方式从另一个组件调用以下方法。例如,我希望立即取消此线程:
Future<String> future = component.run();
future.cancel(true);
在这种情况下,线程将永远不会被取消。这是因为,看看这里的Spring实现:https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncResult.java#L71,这种方法实际上并没有做任何事情。它只是返回 false,即线程无法取消。这是我的问题。如何取消该方法正在创建的线程?我无法访问Spring创建的内部线程 - 所以我自己没有办法取消它,对吗?AsyncResult
@Async