2013-04-16 71 views
1

我特林一个简单的阿卡数据流样本,就像如下:失败阿卡数据流样本

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 
} 

我还设置延续:使在P提交的Scala编译器设置。 但运行程序后,我在控制台中没有任何东西,没有错误,也没有“你好,世界”。我错过了什么?

+3

你应该尝试在你的App中放入一个'Thread.sleep(1000)'。可能是它在'flow'执行之前终止。 – Debilski

+0

我会试一试。但我认为flow {}只是产生Future,而onComplete是它的回调函数。所以我需要一些方法来等待未来完成。 – user1484819

回答

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) 
} 

如果你想使用阿卡数据流作为非阻塞替代线程,这里是我的2美分:

一些核心语言功能(如循环,try /终于)在分隔突破代码块。我一直在使用它来做一些I/O操作,我对它很满意,但是我一定要把它放在引擎盖下。

akka-dataflow的99%是Scala的continuation插件。 flow()(这令我难以置信)和pimped Future#apply()的定义确实都是需要的,而且它们很小。然而,Scala的continuation插件比非阻塞线程的问题要普遍得多。

另一种可选择的解决方案,跟踪scala-async,其中有一个更具体的方法(将您看似顺序代码为future { ... } flatMap { ... }块)

上周我试了一下,因为当时斯卡拉 - 异步代码转换仍然比akka-dataflow支持的要少,但从查看提交日志来看,它似乎正在快速增长并很快超过它。