2011-11-07 12 views
7

問題文:私は、並列に処理する必要がある有価証券のポートフォリオを持っています。 Javaでは、私は各セキュリティを処理するためにスレッドプールを使用し、カウントダウンにラッチを使用します。完了したら、いくつかのマージなどを行います。Akkaを使用したフォーク&ジョイン

私はSecurityProcessor(アクター)にメッセージを送り、すべての未来が完了するのを待ちます。最後に、MergeHelperを使用して後処理を行います。 SecurityProcessorは、セキュリティを取り、いくつかのI/O処理を行い、セキュリティ

val listOfFutures = new ListBuffer[Future[Security]]() 
    var portfolioResponse: Portfolio = _ 
    for (security <- portfolio.getSecurities.toList) { 
    val securityProcessor = actorOf[SecurityProcessor].start() 
    listOfFutures += (securityProcessor ? security) map { 
     _.asInstanceOf[Security] 
    } 
    } 
    val futures = Future.sequence(listOfFutures.toList) 
    futures.map { 
    listOfSecurities => 
     portfolioResponse = MergeHelper.merge(portfolio, listOfSecurities) 
    }.get 

は、この設計正しいです返信、およびアッカを使用して、この共通の問題を実装するためのより良い/クーラー方法はありますか?

答えて

8
val futureResult = Future.sequence(
        portfolio.getSecurities.toList map { security => (actorOf[SecurityProcessor].start() ? security).mapTo[Security] } 
       ) map { securities => MergeHelper.merge(portfolio, securities) } 
+0

は本当にDEFデバッグこの提案を愛し、予想通り、私はそれを分割し、問題をデバッグするEventhandler.info文の束を追加する必要がありましたまで働く:( –

+0

[T](T:T):T = {イベントハンドラ.info(t); t} –

+0

akkaは素晴らしいです! –

関連する問題