actor中!(tell)与forward的差别
2024-09-06 12:13:22
! 的源代码:
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit
tell 的源代码:
final def tell(msg: Any, sender: ActorRef): Unit = this.!(msg)(sender)
forward 的源代码:
def forward(message: Any)(implicit context: ActorContext) = tell(message, context.sender())
通过源代码。我们能够轻而易举的知道 :
! 发送的消息的发送者通过一个隐式转换,把一个ActorRef转换成sender,假设找不到ActorRef的话。那个发送者就是noSender。
forward 发送消息的发送者是当前消息的上一个发送者。
即:
A To B, B To C
假设通过!
的方式发送消息,则C接收到的消息的发送者是B.
假设通过 forward 的方式发送消息。则C接收到的消息的发送者是A.
假设希望 !的方式发送消息的同一时候携带发送者消息,则能够使用 .!(msg)(sender)
假设希望关掉actor,直接shutdown或者使用父亲actor的stop。在actor内部还能够使用context.stop(self)
最新文章
- [LeetCode] Patching Array 补丁数组
- 抓包工具Wireshark过滤器
- CentOS6.5恢复误删除的文件
- c/s模式 (C#)下Ftp的多文件上传及其上传进度
- oracle rownum paging issues
- Sql 邮件发送
- for循环的嵌套
- 在ScrollView中嵌入GridView
- Android 从java字节码告诉你 为什么Handler会造成内存泄露
- WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色
- C# 实体model验证输出
- 在 iOS 应用中直接跳转到 AppStore 的方法--备用
- SuperMap
- /proc/uptime
- QT中定时器的使用方法
- systemd的作用
- UDP 单播、广播、多播
- 剑指offer编程题Java实现——面试题7相关题用两个队列实现一个栈
- Linux_free(buffer与cache区别)
- Android的四大组件学习