Scala Future在分配太多内存时不会返回任何内容

Scala Future在分配太多内存时不会返回任何内容,scala,concurrent.futures,Scala,Concurrent.futures,使用Scala IDE 3.0.3(基于Scala 2.10.4),以下代码通过显示未来计算的列表的前10个值以及未来完成消息正确完成: 导入scala.concurrent_ 导入scala.concurrent.duration_ 导入scala.util.{失败,成功} 导入ExecutionContext.Implicits.global 对象未来非阻塞扩展应用程序{ val f1:Future[List[Int]]=Future{ val t=List.range(1,50).filt

使用Scala IDE 3.0.3(基于Scala 2.10.4),以下代码通过显示未来计算的
列表
的前10个值以及
未来完成
消息正确完成:

导入scala.concurrent_
导入scala.concurrent.duration_
导入scala.util.{失败,成功}
导入ExecutionContext.Implicits.global
对象未来非阻塞扩展应用程序{
val f1:Future[List[Int]]=Future{
val t=List.range(1,50).filter(%2==0)
println(“完成”)
T
}
完成{
案例成功(值)=>println(值取值(10))
案例失败(e)=>println(“发生了不好的事情”)
}
等待。完成(f1,30秒)
}
但是,将范围
List.range(1,50)
更改为
List.range(1,5000)
不会显示任何内容,也不会触发
故障。从逻辑上讲,这似乎与内存问题有关,但我不明白那里发生了什么


更奇怪的是,在REPL中运行此代码不会导致问题。我遗漏了什么?

事实证明,这不是未来的内存管理问题,而是与Eclipse处理并发程序控制台输出的方式有关

在程序末尾添加
Thread.sleep(1000)
,让Eclipse显示所有控制台输出,从而解决了问题


非常感谢@jilen的宝贵评论

事实证明,整个问题不是
Futures
中的内存管理问题,而是与Eclipse处理并发程序控制台输出的方式有关

在程序末尾添加
Thread.sleep(1000)
,让Eclipse显示所有控制台输出,从而解决了问题


非常感谢@jilen的宝贵评论

事实证明,整个问题不是
Futures
中的内存管理问题,而是与Eclipse处理并发程序控制台输出的方式有关

在程序末尾添加
Thread.sleep(1000)
,让Eclipse显示所有控制台输出,从而解决了问题


非常感谢@jilen的宝贵评论

事实证明,整个问题不是
Futures
中的内存管理问题,而是与Eclipse处理并发程序控制台输出的方式有关

在程序末尾添加
Thread.sleep(1000)
,让Eclipse显示所有控制台输出,从而解决了问题



非常感谢@jilen的宝贵评论

我在repl中尝试了这个,发现一切正常。似乎在我的2.10.3 repl中也能正常工作。问题出现在Scala IDE 3.0.3-20140327中,它使用Scala 2.10.4。您使用的是哪个版本的Scala?我在2.10.4 REPL中进行了尝试,这也可以按预期工作。这似乎与Scala IDE本身有关,但我无法想象为什么。相应地编辑问题。如果应用程序在运行后已停止。那么我猜控制台输出丢失了。Eclipse有时似乎无法在多线程环境中显示所有控制台输出。你试着把它打印到一个文件中,然后看到结果。就是这样!只需添加一个
线程。sleep(1000)
等待一段时间就解决了这个问题。非常感谢,我担心幕后会发生一些奇怪的事情!我在repl中尝试了这个,发现一切正常。似乎在我的2.10.3 repl中也能正常工作。问题出现在Scala IDE 3.0.3-20140327中,它使用Scala 2.10.4。您使用的是哪个版本的Scala?我在2.10.4 REPL中进行了尝试,这也可以按预期工作。这似乎与Scala IDE本身有关,但我无法想象为什么。相应地编辑问题。如果应用程序在运行后已停止。那么我猜控制台输出丢失了。Eclipse有时似乎无法在多线程环境中显示所有控制台输出。你试着把它打印到一个文件中,然后看到结果。就是这样!只需添加一个
线程。sleep(1000)
等待一段时间就解决了这个问题。非常感谢,我担心幕后会发生一些奇怪的事情!我在repl中尝试了这个,发现一切正常。似乎在我的2.10.3 repl中也能正常工作。问题出现在Scala IDE 3.0.3-20140327中,它使用Scala 2.10.4。您使用的是哪个版本的Scala?我在2.10.4 REPL中进行了尝试,这也可以按预期工作。这似乎与Scala IDE本身有关,但我无法想象为什么。相应地编辑问题。如果应用程序在运行后已停止。那么我猜控制台输出丢失了。Eclipse有时似乎无法在多线程环境中显示所有控制台输出。你试着把它打印到一个文件中,然后看到结果。就是这样!只需添加一个
线程。sleep(1000)
等待一段时间就解决了这个问题。非常感谢,我担心幕后会发生一些奇怪的事情!我在repl中尝试了这个,发现一切正常。似乎在我的2.10.3 repl中也能正常工作。问题出现在Scala IDE 3.0.3-20140327中,它使用Scala 2.10.4。您使用的是哪个版本的Scala?我在2.10.4 REPL中进行了尝试,这也可以按预期工作。这似乎与Scala IDE本身有关,但我无法想象为什么。相应地编辑问题。如果应用程序在运行后已停止。那么我猜控制台输出丢失了。Eclipse有时似乎无法在多线程环境中显示所有控制台输出。你试着把它打印到一个文件中,然后看到结果。就是这样!只需添加一个
线程。sleep(1000)
等待一段时间就解决了这个问题。非常感谢,我担心幕后会发生一些奇怪的事情!wait.ready(f1)仅等待f1完成,
f1.onComplete
中的内容可能尚未执行。如果您使用
转换
来创建一个新的未来并等待该未来,事情会好起来的。谢谢您指出,这是一个错误。我已经改变了原来的问题来反映这一点。等待。准备就绪(f1)仅限