У меня небольшая проблема с актерами Scala и блокировкой ввода-вывода. Я использую актера, у которого есть анонимный актер, который потребляет входной поток. Проблема в том, что этот поток только считывает одну строку, а затем блокирует, не просыпаясь снова. Что меня смущает, так это то, что он работал, когда потребление происходило в методе действия (совпадение?). В приложении есть еще несколько актеров и потоки 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 _ => {}
}
}
}
С уважением, raichoo
Почему вы используете актер вместо потока Java? Вы не пользуетесь какой-либо из возможностей, характерных для вашего актера, и вы хотите, чтобы он работал всегда. Это именно то, что делает поток. Просто переопределите метод run и поставьте свой блок try. –
Откуда у вас все? Где объявляется «ввод»? Кому принадлежит «processInput»? Актеры касаются поведенческого ответа на _messages_, я не вижу сообщений в вашем примере. –
Я, очевидно, был настолько мертв, что использовал актеров для этого, что я не видел здесь очевидного. Спасибо, что вернул меня в нужное русло. – raichoo