如何返回包含在单独线程中计算的值的期货?

时间:2019-04-21 14:48:37

标签: multithreading scala parallel-processing

我很好奇如何返回一个包含一个字符串值的Future,该字符串值是在单独的线程中计算的,并且不会阻塞调用线程。

我尝试使用Runnable并将其传递到线程池中,但是被覆盖的“ run”方法将来无法返回任何内容,因此无法正常工作。我觉得我应该在我的主要未来之内返回一个未来,当完成创建字符串后,它会返回该字符串,但是我不确定如何。我希望外面的未来能立即回来。

stop()

如何在不阻止外部未来立即返回的情况下获得内部未来来计算值?谢谢!

1 个答案:

答案 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,则您可能做错了:查找如何使用mapflatMap以及理解(这使得mapflatMap的链看起来更整洁了。