可以使用此方法发送答复
reply
,如图所示:
import scala.actors._
class Reverser extends Actor {
def act() { Actor.loop { react {
case s: String => Thread.sleep(1000); reply(s.reverse)
case _ => exit()
}}}
}
有三种方法可以明确地接受回复。
-
使用
!!
,返回
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!