1 个不稳定版本
0.2.0 | 2023年9月17日 |
---|
#2123 in 异步
17KB
173 行
just-watch
仅保留最后一个发送值的单生产者和多消费者通道。
这个crate的目标是提供一个与WASM运行时兼容的 watch
通道,并保持所有依赖项的最新状态。
许可证
原始实现 async_trait 基于 MIT 许可证。
async_watch
的作者
- Carl Lerche
- cynecx
改进
进一步的更改由RillRate DOO完成。
版权所有 © 2022-2023 RillRate DOO
lib.rs
:
最初是 async_watch
crate 的分支。
仅保留 最后一个 发送值的单生产者、多消费者通道。
从 Tokio 的 tokio::sync::watch
实现中提取,该实现由 Carl Lerche 编写。
此通道可用于从代码库的多个位置观察值的更改,例如配置值的更改。
用法
channel
返回一个 Sender
/ Receiver
对。这些是通道的生产者和发送器部分。通道使用初始值创建。访问通道中存储的 最新 值使用 [Receiver::borrow()
]。等待 [Receiver::changed()
] 等待 Sender
半部分发送新值。等待 [Receiver::recv()
] 结合了 [Receiver::changed()
] 和 [Receiver::borrow()
],其中借用值被克隆并返回。
示例
let (tx, mut rx) = just_watch::channel("hello");
let mut rx2 = rx.clone();
// First variant
executor.spawn(async move {
while let Ok(value) = rx.recv().await {
println!("received = {:?}", value);
}
});
// Second variant
executor.spawn(async move {
while rx2.changed().await.is_ok() {
println!("received = {:?}", *rx2.borrow());
}
});
tx.send("world").unwrap();
关闭
使用Sender::closed
可以让生产者检测到所有Receiver
处理句柄已被释放。这表明对产生的值不再感兴趣,可以停止工作。
线程安全
Sender
和Receiver
都是线程安全的。它们可以被移动到其他线程,并可以在并发环境中使用。接收者句柄的克隆可以被移动到不同的线程,并可以并发使用。
依赖
~135KB