如何在Scala actor内部发送延迟响应
非参与者类向参与者发送同步消息,如下所示:如何在Scala actor内部发送延迟响应,scala,actor,Scala,Actor,非参与者类向参与者发送同步消息,如下所示: val response = WorkData !? "hello" 如果我想立即回复此消息,我将执行以下操作: receive { case "hello" => reply("world") } 但是如果我将来需要回复的话 如何存储呼叫者引用,然后发送回复?对当前呼叫者的引用存储在sender中。例如,替换是完全有效的 receive { case "hello" => reply("world") } 与 此后,您可以将此
val response = WorkData !? "hello"
如果我想立即回复此消息,我将执行以下操作:
receive {
case "hello" => reply("world")
}
但是如果我将来需要回复的话
如何存储呼叫者引用,然后发送回复?对当前呼叫者的引用存储在
sender
中。例如,替换是完全有效的
receive {
case "hello" => reply("world")
}
与
此后,您可以将此引用存储在可变变量中,或通过参与者循环递归传递。对当前调用方的引用存储在
发送方
中。例如,替换是完全有效的
receive {
case "hello" => reply("world")
}
与
以后可以将此引用存储在可变变量中,或者递归地通过actor循环传递。我通常会存储发送方引用以供以后使用
receive {
case "hello" =>
val otherParty = sender
// more receives, etc
// ...
otherParty ! "world"
}
我通常会存储发件人引用以供以后使用
receive {
case "hello" =>
val otherParty = sender
// more receives, etc
// ...
otherParty ! "world"
}
让一个匿名参与者来处理消息并在消息准备好时做出响应,怎么样?这样,接收器就充当了调度器。这不需要可变变量来存储任何内容,因为这里使用的是闭包
import scala.actors.Actor
import scala.actors.Actor._
case class Message(msg: String)
class MyReceiver extends Actor {
def act() {
react {
case Message(msg) =>
actor {
sender ! process(msg)
}
}
}
def process(msg: String): String =
"Result: " + msg
}
object Main {
def main(args: Array[String]) {
val a = new MyReceiver
a.start()
val res = a !? Message("foo")
println(res)
}
}
您好,raichoo让一个匿名参与者来处理消息并在消息准备好时做出响应怎么样?这样,接收器就充当了调度器。这不需要可变变量来存储任何内容,因为这里使用的是闭包
import scala.actors.Actor
import scala.actors.Actor._
case class Message(msg: String)
class MyReceiver extends Actor {
def act() {
react {
case Message(msg) =>
actor {
sender ! process(msg)
}
}
}
def process(msg: String): String =
"Result: " + msg
}
object Main {
def main(args: Array[String]) {
val a = new MyReceiver
a.start()
val res = a !? Message("foo")
println(res)
}
}
关于raichoo,我认为如果你想在将来回复,你需要发送一条异步消息(不是与
?!
同步的消息),并且当你的参与者准备好了回复时,最简单的方法是当发送者本身也是参与者时。不幸的是,我需要大量重构,以使发送者成为参与者。我想我可以从某种程度上为发送者获取一个“未来”参考,并用它来发送回复。我认为如果你想在将来回复,你需要发送一条异步消息(而不是与?!
同步的消息),而当发送者本身就是参与者时,参与者在准备好响应时最简单的方法就是将响应交给发送者,也是。不幸的是,我需要大量的重构,才能使发送者成为参与者。我想我可以通过某种方式为发件人获得一个“未来”参考,并用它将答案发回。发件人不是演员,我想我不能通过发件人发回消息?或者我错了?您可以将消息发送回Scala 2.8中的非参与者。发件人不是参与者,我想我不能通过发件人发送消息,而不是?或者我错了?您可以在Scala 2.8中将消息发送回非参与者