2 つのリモート サービスからデータを集約し、可能な限り迅速に応答を返したいとします。
def loadUser: Future[User]
def loadData: Future[Data]
case class Payload(user: User, data: Data)
これは非同期タスクを順番に実行することを理解しています:
for {
user <- loadUser
data <- loadData
} yield Payload(user,data)
これは、非同期タスクが順次チェーンされる前にトリガーされるため、それらを並行して実行します。
val userF = loadUser
val dataF = loadData
for {
user <- userF
data <- dataF
} yield Payload(user,data)
しかし、その違いは私には少し暗すぎて、最初は気付かない人もいるかもしれません。
Applicatives も仕事を解決します
(loadUser |@| loadData) { Payload(_,_) }
並列非同期計算を実行するために、アプリケーションとモナドの間で何を使用したいか教えてもらえますか? 各アプローチの長所と短所は何ですか?