Scala:无法获得 Future 结果

问题描述 投票:0回答:1

我正在尝试在 Intellij Idea 中运行一个简单的 Future 示例:

import scala.concurrent.ExecutionContext.Implicits.global
object Futures1 extends App {
        val f = Future {
                Thread.sleep(500)
                1 + 1
               }
        f map println
        Thread.sleep(5)
}

而且还没有完成。 正如我所想,由于 threadPool 中主线程和线程之间的竞争。

我试着治疗它,通过:

  1. 申请等待:

    Await.result(f map println, Duration(5, SECONDS))
    
  2. 自定义关闭守护线程的执行上下文:

    class MyExecutionContext extends ExecutionContext {
              override def execute(runnable:Runnable) = {
                 val t = new Thread(runnable)
                 t.setDaemon(false)
                 t.start()
                }
              override def reportFailure(t:Throwable) = t.printStackTrace
     }
    
     implicit lazy val context: ExecutionContext = new MyExecutionContext
    

但没有任何帮助。

还有什么办法?

scala future
1个回答
0
投票

问题是

f map println
产生了一个新的Future?

如果你说

println(Await.result(f, Duration(5, SECONDS)))

你的代码可以运行并打印出来 2.

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent._
import scala.concurrent.duration._

val f = Future {
    println("running future")
    1 + 1
}

println("maybe runs ahead or behind the future...")

println(Await.result(f, Duration(5, SECONDS)))

println("app finished")
© www.soinside.com 2019 - 2024. All rights reserved.