總之,沒有辦法配置Spring來做到這一點。
@Async
註釋由AsyncExecutionInterceptor
處理,它將工作委託給AsyncTaskExecutor
。理論上,您可以編寫自己的AsyncTaskExecutor
實現,但即使如此,也無法使用註釋將期望的等待時間傳遞給執行程序。即使如此,我不清楚調用者的界面是什麼樣子,因爲他們仍然會得到一個Future
對象。您可能還需要繼承Future
對象的子類。基本上,當你完成的時候,你將會從頭開始重新編寫整個特性。
你總是可以包返回Future
對象在自己WaitingFuture
代理提供一個備用的get實現儘管後來連你有沒有對被叫方指定的等待值的方式:
WaitingFuture<ModelObject> future = new WaitingFuture<ModelObject>(service.doSomething());
ModelObject result = future.get(3000); //Instead of throwing a timeout, this impl could just return null if 3 seconds pass with no answer
if(result == null) {
//Path A
} else {
//Path B
}
或者如果你不想寫自己的課,那就趕上TimeoutException
。
Future<ModelObject> future = doSomething();
try {
ModelObject result = future.get(3000,TimeUnit.MILLISECONDS);
//Path B
} catch (TimeoutException ex) {
//Path A
}
可能重複(HTTP:/ /stackoverflow.com/questions/3785197/providing-a-timeout-value-when-using-async-for-a-method-using-spring-3-0) – 2013-04-07 08:04:08
沒有。這不是重複的問題,因爲如何限制整個異步任務執行的時間。 – 2013-04-07 08:35:48