我正在尝试一个简单的akka数据流示例,如下所示:
import akka.dataflow._ //to get the flow method and implicit conversions
object FlowTestApp extends App {
import scala.concurrent.ExecutionContext.Implicits.global
flow {
println("in flow")
"Hello world!"
} onComplete println
}
我还设置了continuation:在scala编译器设置的P字段中启用。 但是在运行程序之后,我在控制台中什么都没有,没有错误,也没有“你好,世界”。我错过了什么?
答案 0 :(得分:3)
import akka.dataflow._
import scala.concurrent._, ExecutionContext.Implicits._
// the following are for duration
import scala.language.postfixOps
import scala.concurrent.duration._
object FlowTestApp extends App {
val f = flow {
println("in flow")
"Hello world!"
} onComplete println
Await.ready(f, 1 second)
}
如果您正在考虑使用Akka Dataflow作为线程的非阻塞替代方案,那么这是我的2美分:
一些核心语言功能(例如循环,try / finally)在分隔的代码块中中断。我一直在用它来做一些I / O而且我很满意它,但是我一定要把它放在引擎盖下。
%99的akka-dataflow是Scala的continuation插件。 flow()(令人难以置信的)和拉皮条的未来#applied()的定义真的是所有需要的,而且它们非常小。然而,Scala的continuation插件比非阻塞线程的问题更通用。
对于替代解决方案,请跟踪scala-async,它具有更具体的方法(将看似顺序的代码转换为future { ... } flatMap { ... }
块)
我上周尝试过,从那时起,scala-async的代码转换仍然比akka-dataflow所支持的更少,但是从查看提交日志来看,它似乎正在快速增长并且很快就会超越它。