2013-04-16 145 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支持的要少,但從查看提交日誌來看,它似乎正在快速增長並很快超過它。