Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个简单的理解Scala不能执行未来?_Scala_Future_For Comprehension - Fatal编程技术网

为什么这个简单的理解Scala不能执行未来?

为什么这个简单的理解Scala不能执行未来?,scala,future,for-comprehension,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 =

我一直在想为什么这样不行:

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))
  }
}
导入scala.concurrent.future
导入scala.concurrent.Future
导入scala.concurrent.ExecutionContext
导入scala.concurrent.ExecutionContext.Implicits.global
目标未来测试{
def main(参数:数组[字符串]){
val result1=未来(“a”)
val result2=未来(“b”)
val result3=未来(“c”)
val res=用于{

r1您正在执行一个独立的程序,问题是主线程在将来可以完成之前被终止,要查看您可以使用以下内容:

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.concurrent.future
导入scala.concurrent.Future
导入scala.concurrent.ExecutionContext
导入scala.concurrent.ExecutionContext.Implicits.global
目标未来测试{
def main(参数:数组[字符串]){
val result1=未来(“a”)
val result2=未来(“b”)
val result3=未来(“c”)
val res=用于{

r1在我的例子中打印“abc”…我修复了这个问题,添加了一个等待结果(res,3分钟),其中res是从for分配的val。不知何故,我希望程序自动无限期等待期货终止。显然这没有发生。我在您回答之前找到了类似的解决方案(请参阅问题的第二条注释)。但是,是的,我同意这是解决方案。如果是这样的话,期货可能就没有用了,因为主线程可能会无限期地阻止等待未来的结果:我同意期货一般应该是异步的,但至少主线程可以在终止前等待任何未完成的期货。我猜!@sscarduzio这是更多关于ExecutionContext而非Futures的信息。您可以提供自己的ExecutionContext,它使用非守护进程线程。