簡體   English   中英

如何使用 Spring AsyncResult 和 Future Return

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM