我正在尝试实现一个返回类型为Future的Spring @Async任务,但我真的无法弄清楚如何正确地执行它。
- 这样做会有什么好处?我现在是否可以控制我的任务,以便我可以停止它并运行它?
- 是否有任何参考实现可以让我学习如何实现?Spring官方文档中没有提供。
编辑
来自Spring源码和Spring参考手册:
甚至返回值的方法也可以异步调用。但是,这些方法需要具有Future类型的返回值。这仍然提供了异步执行的好处,以便调用者在调用该Future之前执行其他任务。
并且它给出了以下示例:
@Async
Future<String> returnSomething(int i) {
// this will be executed asynchronously
}
如何正确实现这个?
Future
对象上的cancel(true)方法来中断你的异步方法。但是中断不会自动生效,方法本身需要检查是否被中断,可以通过调用Thread.isInterrupted()
或使用抛出InterruptedException
的方法来实现。请参阅The Java Tutorial中的Interrupts章节。 - PetrtaskId
(表示任务注册的字符串,帮助用户跟踪任务进度),那么在必须由带有@Async
注释的方法生成taskId
而不是调用者时,我该如何实现这一点? - Web User