2013-05-17 8 views
6

これは動作するコードです。それはActor(Greeter)にメッセージを送り、答えを返すのを待ちます。 しかし、現在のスレッドをブロックします。Akkaの俳優からの応答としての未来のonSuccessの扱い

public class Future1Blocking { 

    public static void main(String[] args) throws Exception { 

     ActorSystem system = ActorSystem.create("system"); 
     final ActorRef actorRef = system.actorOf(Props.create(Greeter.class), "greeter"); 

     Timeout timeout = new Timeout(Duration.create(5, "seconds")); 
     Future<Object> future = Patterns.ask(actorRef, Greeter.Msg.GREET, timeout); 

     // this blocks current running thread 
     Greeter.Msg result = (Greeter.Msg) Await.result(future, timeout.duration()); 

     System.out.println(result); 

    } 
} 

私の例では、現在の呼び出し元のスレッドをブロックせずに結果を得るためにfuture.onSuccessを使用するための可能な方法は何ですか?

答えて

10

Ahh。それは簡単でした(申し訳ありません)。

future.onSuccess(new PrintResult<Object>(), system.dispatcher()); 

どこ:

public final class PrintResult<T> extends OnSuccess<T> { 
    @Override public final void onSuccess(T t) { 
     System.out.println(t); 
    } 
} 
関連する問題