2017-04-25 8 views
2

私は機能今Scalaは、並列の二つの機能

def myfunc(l: List[RoseTree]): Option[RoseTree] = { 
    //Complex calculations 
} 

の次の宣言を持っているに実行し、私は2つの巨大な異なるリストにこの機能を実行する必要があります。だから、私は、異なるデータを使って、同じ機能を並行して実行したいと考えています。

私はScalaのFutureモジュールを見てきました。

しかし、いずれかの関数が "Some(RoseTree)"を返すときは、もう一方の呼び出しが停止して結果を保持するように指示します。これは可能ですか?

敬具。

答えて

1

Scalaにはこのための機能が組み込まれています。 Future.firstCompletedOf()の組み合わせでFutureを使用することができます。

Scala docのチェックを持ってくださいと私はコメント欄でのポイントとして this post

を見てすることをお勧め、Future.firstCompletedOfは「1が完了した後に先物をキャンセルする」要件を満たしていません。デフォルトでこれをサポートするMonix Task(Scala Futuresの代わりとなる)を使用することができます。 thisをご覧ください。

+1

私はこの関数が残りの先物をキャンセルするとは思わない。 –

+1

良い点。 Monixタスクは実際にはより自然にこのユースケースをサポートします:https://monix.io/docs/2x/eval/task.html#choose-first-of-list –

+0

未来はタスクではありません。 (つまり、実行中の計算を表していません) –

関連する問題