有什么区别?据我了解,Tell(对象,IActorRef)发送原始发件人。但是,为什么不只使用Forward方法呢?

谢谢

最佳答案

您可以将actorRef.Tell(msg)视为actorRef.Tell(msg, Context.Self)的快捷方式,而actorRef.Forward(msg)保留原始消息发件人。这也意味着,您需要在后台使用活跃的actor上下文来定义任何有意义的Sender。

使用Tell(object, IActorRef)允许您将Sender设置为您喜欢的任何actor ref,包括模拟为其他actor或ActorRefs.NoSender之类的东西,这可以用于减少通过电线发送的有效负载的大小,因为消息发送者不会不能序列化。

在某些远程方案中,如果您不希望向Sender发送答案,则使用actorRef.Tell(msg, ActorRefs.NoSender)可能会带来不错的性能优势。

为什么? IActorRef被序列化为URI字符串(例如:akka.tcp:// system-name @ localhost:9001 / user / parent / child)。当您发送小消息(例如股票价格变动或游戏角色位置发生变化)时,这可能意味着有效负载中最昂贵的部分实际上是发件人。

反序列化IActorRef也需要一些额外的时间,因为参与者提供者需要为其解决正确的消息传输。

由于这些原因,如果您不需要Sender,则使用ActorRefs.NoSender可能是有效的选择。

关于c# - akka.net告诉(对象)vs告诉(对象,IActorRef),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46718515/

10-11 02:04