我很好奇如何返回一个包含一个字符串值的Future,该字符串值是在单独的线程中计算的,并且不会阻塞调用线程。
我尝试使用Runnable并将其传递到线程池中,但是被覆盖的“ run”方法将来无法返回任何内容,因此无法正常工作。我觉得我应该在我的主要未来之内返回一个未来,当完成创建字符串后,它会返回该字符串,但是我不确定如何。我希望外面的未来能立即回来。
stop()
如何在不阻止外部未来立即返回的情况下获得内部未来来计算值?谢谢!
答案 0 :(得分:1)
您的简化代码有些混乱,但是我猜测您真正想做的是将Future[Future[String]]
简化为Future[String]
。如果您可以避免一开始就创建外部未来(代码会建议),那么您就不需要这样做-只需返回Future[String]
而不等待它,就不会阻塞线程。
如果要展平Future[Future[String]]
,则有一些解释here。简而言之,如果您使用的是Scala 2.12+,则可以致电f.flatten
。在此之前,请使用f.flatMap(identity)
(其中f
是您的Future[Future[String]]
)。
如果您要在代码中最外面的地方以外的任何地方编写Await.result,则您可能做错了:查找如何使用map
和flatMap
以及理解(这使得map
和flatMap
的链看起来更整洁了。