Scala 2.10期货与SBT中的readLine
我真的很喜欢Scala 2.10中新的Scala 2.10期货与SBT中的readLine,scala,future,Scala,Future,我真的很喜欢Scala 2.10中新的FutureAPI,我正试图用它来编写一个简单的脚本。该计划的要点如下: 对某个URL的HTTP请求 根据响应需要用户输入 深加工 我们的想法是将所有东西都作为一个未来链(flatmap等)来实现,但我的问题是: 我目前正在SBT中进行测试,所以当主线程完成时,SBT将返回其REPL。同时,我的未来计算仍在等待用户输入。一旦我开始尝试输入,步骤2中的readLine调用似乎正在与SBT试图执行的任何输入进行斗争 例如,如果我的预期输入是abcdefghijk
Future
API,我正试图用它来编写一个简单的脚本。该计划的要点如下:
未来
计算仍在等待用户输入。一旦我开始尝试输入,步骤2中的readLine
调用似乎正在与SBT试图执行的任何输入进行斗争
例如,如果我的预期输入是abcdefghijklmnop
,我的程序将收到其中的一个随机子集,如adghip
,然后当它完成时,SBT将告诉我bcefjklmno
不是命令
我怎么能
读线
替换为不会与SBT发生冲突的其他调用使用
scala.concurrent.Await
()。也许下面的草图就是你要找的
导入scala.concurrent.Future
导入scala.concurrent.ExecutionContext_
导入scala.concurrent.duration.duration
导入scala.concurrent.duration_
导入scala.concurrent.Await
导入java.util.concurrent.Executors.newScheduledThreadPool
对象测试{
隐式val executor=fromExecutorService(newScheduledThreadPool(10))
val超时=30秒
def main(参数:数组[字符串]){
瓦尔f=
//发出HTTP请求,这将产生一个字符串(比如);这里模拟如下
未来[字符串]{
线程。睡眠(1000)
“答复”
}.
//读取输入
地图{
响应=>
println(“请说明您的问题:”)
val ln=readLine()//注意:这是阻塞。
(答复,ln)
}.
//进一步加工
地图{
案例(响应、输入)=>
println(“响应:+Response+”,输入:+input)
}
等待。准备就绪(f,超时)
}
}
Ahh,也许可以回答我的问题。我会把这件事留着,直到我因为不善于搜索而感到很难过。