Akka数据流样本失败

时间:2013-04-16 14:40:48

标签: scala akka dataflow

我正在尝试一个简单的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字段中启用。 但是在运行程序之后,我在控制台中什么都没有,没有错误,也没有“你好,世界”。我错过了什么?

1 个答案:

答案 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所支持的更少,但是从查看提交日志来看,它似乎正在快速增长并且很快就会超越它。