我有一個Akka actor負責處理http調用。我用斯卡拉派遣了一個API發送多個HTTP請求:如何處理(akka)演員中的多個承諾?
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)
}
}
在resultHandler
功能,我遞增變量nbOfResults
一個實例,並比較呼叫我做的次數。
def resultHandler(result:String)
{
this.nbOfResults++
...
if(nbOfResults == nbOfCalls)
// Do something
}
安全嗎?如果兩個調用同時返回結果,可能同時訪問變量nbOfResults
?
現在,我相信演員或多或少地等同於一個線程,因此回調函數不會同時執行。這是對的嗎 ?
的答案包含關於如何做到這一點的建議,我只是想備案明確指出,是的,你需要注意異步回調,他們將被同時執行。因此,總之,在上面的代碼中處理nbOfResults是不正確的。 –