【发布时间】:2025-11-29 18:15:01
【问题描述】:
我正在浏览一些未来的例子。我有一个 Future 从方法中检索列表。我调用两种不同类型的回调,一个 Foreach 回调和一个 onComplete 回调只是为了尝试一下。
- Foreach 回调几乎每次都返回列表。
- 即使 For 回调已返回列表,onComplete 回调也很少返回 SUCCESS。
- onComplete 回调永远不会返回 FAILURE。
有人可以向我解释发生了什么吗?
我了解回调确实同时执行,并且没有顺序。但是如果 Future 将列表返回给 Foreach 并且 onComplete 回调在 Foreach 和 Future 之前执行并且它试图从不成功的 Future 获取列表,那么 onComplete 回调不应该返回 FAILURE 吗?
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
object FuturesExampleObj extends App {
println("Using Future to retrieve list\n")
val l: Future[List[String]] = Future {
getList()
}
println("FOR CALLBACK --------------------\n")
l foreach {
items =>
for(item <- items) println(s"foreach item : $item")
println("\n")
}
println("onComplete CALLBACK --------------------\n")
l onComplete {
case Success(i) => println(s"SUCCESS : $i")
case Failure(i) => println(s"FAILURE : $i")
}
def getList(): List[String] ={
val list = ("a" :: "b" :: "c" :: "d" :: "e":: Nil)
list
}
}
结果示例 1(通用)
Using Future to retrieve list
FOR CALLBACK --------------------
onComplete CALLBACK --------------------
foreach item : a
foreach item : b
foreach item : c
foreach item : d
foreach item : e
Process finished with exit code 0
结果示例 2(不常见)
Using Future to retrieve list
FOR CALLBACK --------------------
onComplete CALLBACK --------------------
Process finished with exit code 0
结果示例 3(非常罕见)
基本上 onComplete 永远不会返回 SUCCESS 或 FAILURE。有时,很少会返回“SUCCESS:” + 列表。
【问题讨论】:
标签: scala concurrency callback future