gpt4 book ai didi

scala - 如何在(akka)Actor 中处理多个 promise ?

转载 作者:行者123 更新时间:2023-12-04 17:52:39 27 4
gpt4 key购买 nike

我有一个负责处理 http 调用的 Akka Actor 。我使用 scala dispatch 通过 API 发送多个 HTTP 请求:

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
}

安全吗? 5月 nbOfResults如果两个调用同时返回它们的结果,是否可以同时访问变量?

目前,我认为 actor 或多或少相当于一个线程,因此回调函数不是并发执行的。这是正确的吗 ?

最佳答案

这是仅使用 dispatch 的 Alexey Romanov 响应的变体:

//Promises will be of type Array[Promise[Either[Throwable, String]]]
val promises = urls.map { u =>
val service = url(u)

Http(service OK as.String).either
}

//Http.promise.all transform an Iterable[Promise[A]] into Promise[Iterable[A]]
//So listPromise is now of type Promise[Array[Either[Throwable, String]]]
val listPromise = Http.promise.all(promises)

for (results <- listPromise) {
//Here results is of type Array[Either[Throwable, String]]

results foreach { result =>
result match {
Left(error) => //Handle error
Right(response) => //Handle response
}
}
}

关于scala - 如何在(akka)Actor 中处理多个 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com