我在使用Scala Actors和阻止IO方面遇到了一些问题。我正在使用一个演员本身有一个消耗输入流的匿名演员。问题是这个流只读取一行然后阻塞而不再唤醒。令我感到困惑的是,当消费发生在行为方法时(巧合?),它起作用了。应用程序本身有更多的actor和java线程在做一些工作。
我的问题是:避免此类问题的常见做法是什么?有什么指针吗?
导致此问题的代码看起来像这样:
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 _ => {}
}
}
}
此致 raichoo
答案 0 :(得分:1)
对readLine的调用是在循环{}内部,所以它会一遍又一遍地发生,直到它阻塞。