为使用Spring 3.0的方法使用@Async时提供超时值

Aay*_*uri 12 java spring asynchronous

我仔细查看了文档,但是在使用Spring 3.0使用@Async注释方法时,无法找到是否有一种方法可以指定生成的异步操作的超时.

有没有办法做到这一点?我认为这在触发异步计算时非常重要.

ska*_*man 16

@Async注释不提供超时,因为超时应由函数的调用者决定,而不是由函数本身决定.

我假设你指的是一个@Async返回结果的注释方法的超时.此类方法应返回实例Future,并且get()方法on Future用于指定超时.

例如

@Async
public Future<String> doSomething() {
   return new AsyncResult<String>("test");
}
Run Code Online (Sandbox Code Playgroud)

然后

Future<String> futureResult = obj.doSomething();  // spring makes this an async call
String result = futureResult.get(1, TimeUnit.SECOND);
Run Code Online (Sandbox Code Playgroud)

  • 但是这种方法不会取消工作线程.你有什么想法取消这个帖子吗? (3认同)
  • @pablobaldez 调用 `future.cancel(true);` 如果你得到 timeoutException (2认同)