1

次のように、単純な 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
}

また、scala コンパイラの設定の P フィールドに continuations:enable を設定します。しかし、プログラムを実行した後、コンソールには何も表示されず、エラーも「こんにちは、世界」も表示されませんでした。私は何を取りこぼしたか?

4

1 に答える 1

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 に使用しており、満足していますが、ボンネットの下に保管するようにしてください。

akka-dataflow の 99% は Scala の継続プラグインです。flow()の定義(これには頭がおかしくなりました) と、ポン引きした Future#apply() だけで本当に必要なものはすべて揃っており、それらは非常に小さいものです。ただし、Scala の継続プラグインは、ノンブロッキング スレッドの問題よりもはるかに一般的です。

別の解決策として、より具体的なアプローチ (一見シーケンシャルなコードをブロックに変換する)を持つscala-asyncを追跡します。future { ... } flatMap { ... }

先週試してみましたが、その時点では、scala-async のコード変換は akka-dataflow でサポートされているものよりもまだカバーされていませんが、コミット ログを見ると、急速に増加しているようで、すぐにそれを超えるでしょう。

于 2013-04-16T21:08:25.643 に答える