在Akka教程中,我有时会看到
Behaviors.setup { ctx => ... Behaviors.receiveMessage[String] { msg => ... // some operations with ctx and message } }
有时候
Behaviors.receive[String] { (ctx , msg) => ... // some operations with ctx and message }
有什么区别吗?
wj8zmpe11#
无论是否有要处理的消息,传递给Behaviors.setup的函数(ActorContext[String] => Behavior[String])都会在生成参与者时执行。传递给Behaviors.receive的函数((ActorContext[String], String) => Behavior[String])只有在有消息要处理时才会执行。请注意,如果您
Behaviors.setup
ActorContext[String] => Behavior[String]
Behaviors.receive
(ActorContext[String], String) => Behavior[String]
Behaviors.setup { ctx => // code block A Behaviors.receiveMessage[String] { msg => // code block B } } Behaviors.receive[String] { (ctx, msg) => // code block A // code block B }
Behaviors.receive中的code block A将对每个消息执行(除非并且直到由code block B安装了新的Behavior)。
code block A
code block B
Behavior
1条答案
按热度按时间wj8zmpe11#
无论是否有要处理的消息,传递给
Behaviors.setup
的函数(ActorContext[String] => Behavior[String]
)都会在生成参与者时执行。传递给
Behaviors.receive
的函数((ActorContext[String], String) => Behavior[String]
)只有在有消息要处理时才会执行。请注意,如果您
Behaviors.receive
中的code block A
将对每个消息执行(除非并且直到由code block B
安装了新的Behavior
)。