私は、http呼び出しの処理を担当するAkkaの俳優を務めています。私は、APIを介して複数のHTTPリクエストを送信するためにScalaの派遣を使用します。resultHandler
機能で(akka)Actorで複数の約束を処理する方法は?
urls.foreach { u
val service = url(u)
val promise = Http(service OK as.String).either
for(p <- promise)
{
p match
{
case Left(error) =>
faultHandler(error)
case Right(result) =>
resultHandler(result)
}
}
、私はインスタンス変数nbOfResults
をインクリメントし、私が行ったコールの数と比較します。
def resultHandler(result:String)
{
this.nbOfResults++
...
if(nbOfResults == nbOfCalls)
// Do something
}
安全ですか? 2つの呼び出しが同時に結果を返す場合は、nbOfResults
に同時にアクセスできますか?
今のところ、アクターは多かれ少なかれスレッドと同等であると考えられ、したがってコールバック関数は同時に実行されません。それが正しいか ?
以下の回答含まれ、私ははっきりとはい、あなたのレコードの状態したいのですが非同期コールバックに注意する必要がありますが、それらは同時に実行されます。つまり、上のコードのnbOfResultsの処理が間違っています。 –