[英]How to use Spring AsyncResult and Future Return
我有一個公共接口 Synchronous,它暴露給多個服務層類。 它的目的是根據傳遞的 id 查找對象圖,執行一些業務邏輯,然后將其傳遞給 Spring 異步方法 Asynchronous.doWork 以完成其余任務。
我正在嘗試使用 Spring AsyncResult,但我不確定返回的對象 WorkResult 實際返回到什么。 我需要在 SynchronousImpl 的某個地方放置一個處理程序嗎? 想法?
同步公共服務:
public class SynchronousImpl implements Synchronous {
private Asynchronous async;
//business logic
public void doWork(long id){
async.doWork(id);
}
}
異步工作者類:
public class Asynchronous {
@Async
public Future<WorkResult> doWork(long id){
//business logic
WorkResult result = new WorkResult(id, "Finished");
return new AsyncResult<WorkResult>(result);
}
}
Future
與 Spring 無關, Future
是屬於 Java 6 並發框架的類。
一個典型的用例是這樣的:
public void doWork(long id) {
Future<WorkResult> futureResult = async.doWork(id);
//Do other things.
WorkResult result = futureResult.get(); //The invocation will block until the result is calculated.
}
在 async 方法啟動后(這是 Spring 幫助其@Async
注釋的地方),調用者立即獲得Future
對象。 但是未來的對象不是結果,它只是真實結果的包裝器/占位符/代理/引用。
現在調用者和工作者並行運行並且可以做不同的事情。 當調用者調用futureResult.get();
並且真正的結果還沒有計算出來,這個線程被阻塞,直到結果由工作人員提供。 (當調用者調用futureResult.get();
並且已經計算出真正的結果時,他立即得到結果)
@Aysnc
public Future doWork() {
if (reason) {
return; // Missing return value error,,but i needn't return anything
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.