当使用 tokio watch 频道时,我注意到我可以使用发送方中的订阅方法来获取另一个接收方,或者我可以克隆现有的接收方:
let (sender, mut receiver) = watch::channel(1);
let receiver_2 = sender.subscribe();
let receiver_3 = receiver.clone();
receiver_2 和receiver_3 似乎工作原理相同,但我缺少什么主要区别吗?
查看
Receiver::clone
和Sender::subscribe
的源代码,创建的接收器没有区别:它们都相当于Receiver::from_shared (sender.shared.state.load().version(), sender.shared.clone())
。
唯一的区别是,如果没有现有的接收者,
Sender::subscribe
将重新打开发送者。