可以使用 method 发送回复reply
,如下所示:
import scala.actors._
class Reverser extends Actor {
def act() { Actor.loop { react {
case s: String => Thread.sleep(1000); reply(s.reverse)
case _ => exit()
}}}
}
可以通过三种方式明确接受回复。
- Use
!!
,它返回 a Future
,它是一个容器类,承诺在您需要时为您提供内容。它立即返回,但如果你真的要求内容,你必须等到另一个线程完成并填充请求。
- 使用
!?
没有超时。只要其他线程回复,您的代码就会暂停。
- 使用
!?
超时。您的代码将暂停,直到收到回复或超时到期,以先到者为准。
这是所有三个的示例:
val r = new Reverser
r.start
val a = (r !! "Hi")
a() match {
case s: String => println(s)
case _ => println("Error A")
}
val b = r !? "Hello"
b match {
case s: String => println(s)
case _ => println("Error B")
}
val c = (r !? (500,"Howdy"))
c match {
case Some(s: String) => println(s)
case Some(_) => println("Error C")
case None => println("Too slow!")
}
r ! None // None isn't a string, so r will stop running
如果你运行它,你会得到
iH
elloH
Too slow!