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 でサポートされているものよりもまだカバーされていませんが、コミット ログを見ると、急速に増加しているようで、すぐにそれを超えるでしょう。