同様の質問を見つけましたが、高価な操作が常に同じである、より単純なケースと思われるものがあります。私の場合、並行して実行したい高価な API 呼び出しの一連の結果を収集したいと考えています。
私が持っているとしましょう:
def apiRequest1(q: Query): Option[Result]
def apiRequest2(q: Query): Option[Result]
はq
同じ値です。
または同様の操作が必要でList[Result]
(明らかList[Option[Result]]
に問題ありません)、2 つの高価な操作を並行して実行したいと考えています。
当然、単純なList
コンストラクターは並行して実行されません。
List(apiRequest1(q), apiRequest2(q))
並列コレクションは役に立ちますか? それとも、代わりに先物などに目を向けるべきですか?並列コレクションを使用して私が考えることができる唯一のアプローチは、ハッキーに思えます:
List(q, q).par.zipWithIndex.flatMap((q) =>
if (q._2 % 2 == 0) apiRequest1(q._1) else apiRequest2(q._1)
)
実際、すべてが同じなら、それほど悪くはないかもしれません...