【发布时间】:2021-06-07 19:19:06
【问题描述】:
scala Future 有一个 fromTry 方法
用指定的结果创建一个已经完成的 Future 或 例外。
问题是新创建的Future已经完成了。是否可以同时对Try 进行评估?
例如,给定一个返回Try的函数:
def foo() : Try[Int] = {
Thread sleep 1000
Success(43)
}
foo的评估如何同时进行?
一种粗略的方法是简单地将Future 包裹在函数周围:
val f : Future[Try[Int]] = Future { foo() }
但所需的返回类型是Future[Int]
val f : Future[Int] = ???
实际上,Try 如何在类似于fromTry 方法的Future 中展平?
有a similar question,但问题&答案等待Try的评估,然后再构建完成的Future。
【问题讨论】:
-
正如我常说的,Scaladoc 是你的朋友 -
Future.delegate(Future.fromTry(foo())) -
不,
delegate不是。您正在寻找Future(foo.get) -
@Dima 仅当
Try为Success而不是Failure时才有效。 -
@RamónJRomeroyVigil 不。无论哪种方式都可以。试试看:)
-
@Dima 打代码高尔夫 :) 我认为 Luis 的挥杆是正确的,因为
delegate在执行上下文中执行了按名称参数。我的挥杆:Future(foo()).flatMap(Future.fromTry)
标签: multithreading scala concurrency future