[Scala]:演员和阻塞IO的问题

[Scala]:演员和阻塞IO的问题,scala,io,blocking,actor,Scala,Io,Blocking,Actor,我对Scala演员和阻止IO有点问题。我使用的是一个参与者,它本身有一个使用输入流的匿名参与者。问题是这个流只读取一行,然后阻塞而不再唤醒。让我困惑的是,当消费发生在act方法中时,它起作用了(巧合?)。应用程序本身有更多的参与者和java线程来做一些工作 我的问题是:避免此类问题的常见做法是什么?有什么建议吗 导致此问题的代码如下所示: object TestActor extends Actor { private val instream = actor { loop {

我对Scala演员和阻止IO有点问题。我使用的是一个参与者,它本身有一个使用输入流的匿名参与者。问题是这个流只读取一行,然后阻塞而不再唤醒。让我困惑的是,当消费发生在act方法中时,它起作用了(巧合?)。应用程序本身有更多的参与者和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

对readLine的调用在循环{}内,因此它会反复发生,直到阻塞为止。

为什么要使用actor而不是Java线程?您没有利用任何特定于参与者的功能,并且希望它始终运行。这正是线程所做的。只需重写run方法并将try块放在那里。您从哪里获取所有信息?“输入”在哪里声明?谁拥有“processInput”?演员是关于对消息的行为反应,我在你的例子中根本看不到任何消息。显然,我是如此死心塌地地地使用演员来实现这一点,以至于我在这里没有看到明显的效果。谢谢你让我重回正轨。