reply次に示すように、メソッドを使用して返信を送信できます。
import scala.actors._
class Reverser extends Actor {
def act() { Actor.loop { react {
case s: String => Thread.sleep(1000); reply(s.reverse)
case _ => exit()
}}}
}
返信を明示的に受け入れる方法は 3 つあります。
!!を返すを使用しますFuture。これは、必要なときにコンテンツを提供することを約束するコンテナー クラスです。すぐに戻りますが、実際にコンテンツを要求すると、他のスレッドが完了して要求を満たすまで待つ必要があります。
!?タイムアウトなしで使用します。他のスレッドが応答するまで、コードは一時停止します。
!?タイムアウトで使用します。コードは、応答を受け取るまで、またはタイムアウトになるまで一時停止します。
3 つすべての例を次に示します。
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!