ScalaアクターとIOのブロックに少し問題があります。私は、入力ストリームを消費する匿名のアクタを持つアクタを使用しています。問題は、このストリームは1行だけを読み込み、次に再び起きることなくブロックすることです。私が混乱させるのは、消費が行為の方法で起こったときに働くということです(偶然?)。アプリケーション自体にはいくつかのアクターとJavaスレッドがあります。[Scala]:アクターとブロックIOの問題
私の質問です:このような問題を回避するための一般的な慣行は何ですか?すべてのポインタ?
この問題が発生するコードがやや次のようになります。
object TestActor extends Actor {
private val instream = actor {
loop {
try {
println(processInput(input.readLine)) //bufferedinputstream. blocks, no wakeup
} catch {
case e: Exception =>
println(e.toString)
}
}
}
def act(): Unit = {
react {
...
case _ => {}
}
}
}
よろしく、のreadLineへ raichoo
なぜJavaスレッドの代わりにアクターを使用していますか?あなたは俳優特有の機能のどれかを利用しておらず、あなたはそれを常に実行したいと思っています。スレッドとまったく同じです。 runメソッドをオーバーライドしてtryブロックをそこに置きます。 –
あなたはどこからすべてを得ていますか? 「入力」はどこで宣言されていますか?誰が "processInput"を所有していますか? Actorsは_messages_に対する行動的な反応です。あなたの例ではメッセージは全く表示されません。 –
私は明らかに、このために俳優を使って死んでしまったので、私はここではっきりとわかりませんでした。私を軌道に戻してくれてありがとう。 – raichoo