scala - 为什么这个简单的 Scala for comprehension 不执行 future ?

标签 scala future for-comprehension

我一直在想为什么这不起作用:

import scala.concurrent.future
import scala.concurrent.Future
import scala.concurrent.ExecutionContext

import scala.concurrent.ExecutionContext.Implicits.global

object FutureTest {

  def main(args: Array[String]) {
    val result1 = future("a")
    val result2 = future("b")
    val result3 = future("c")

    val res = for {
      r1 <- result1
      r2 <- result2
      r3 <- result3
    } yield (r1 + r2 + r3)

    for { r <- res} yield(println(r))
  }
}

我希望这会打印“abc”,但实际上什么也没有发生。

最佳答案

你正在执行一个独立的程序,问题是主线程在 future 完成之前终止,你可以使用这个来查看:

import scala.concurrent.future
import scala.concurrent.Future
import scala.concurrent.ExecutionContext

import scala.concurrent.ExecutionContext.Implicits.global

object FutureTest {

  def main(args: Array[String]) {
    val result1 = future("a")
    val result2 = future("b")
    val result3 = future("c")

    val res = for {
      r1 <- result1
      r2 <- result2
      r3 <- result3
    } yield (r1 + r2 + r3)

    val printing = for { r <- res} yield(println(r))

    Await.ready(printing, Duration.Inf)
  }
}

关于scala - 为什么这个简单的 Scala for comprehension 不执行 future ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24280347/

相关文章:

Scala Future[Option[T]] 解包

scala - Scala 中的匿名函数和映射

scala - 如何在scala中实现类型安全域存储库?

scala - 了解 Scala 可变集 val 引用

Scala Akka Play, future 不会回来

c++ - 有没有办法知道将来是否会抛出get()?

string - 使用 for 理解的函数组合会产生 Char 而不是 String

scala - 如何在 Scala 中验证数字字符?

list - flutter 如何在初始化状态下使用 future 的异步方法

Scala 异步/回调代码重写