2次发布
0.3.1 | 2020年10月7日 |
---|---|
0.3.0 | 2020年9月12日 |
0.2.0 |
|
0.1.0 |
|
#2011 在 异步
每月4,619次下载
16KB
157 行
async-watch
单生产者、多消费者通道,仅保留最后一个发送的值。
从 Tokio 的 tokio::sync::watch
实现,由 Carl Lerche 编写。
许可证
async-watch 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。
有关详细信息,请参阅 LICENSE-APACHE 和 LICENSE-MIT。
lib.rs
:
单生产者、多消费者通道,仅保留最后一个发送的值。
从 Tokio 的 tokio::sync::watch
实现,由 Carl Lerche 编写。
此通道可用于从代码库中的多个点观察值的更改,例如配置值的更改。
使用方法
channel
返回一个 Sender
/ Receiver
对。这些是通道的生产者和发送者部分。通道使用初始值创建。使用 [Receiver::borrow()
] 访问存储在通道中的最新值。[Receiver::changed()
] 等待 Sender
半部分发送的新值。使用 [Receiver::recv()
] 组合 [Receiver::changed()
] 和 [Receiver::borrow()
],其中借用值被克隆并返回。
示例
let (tx, mut rx) = async_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();
关闭
发送者::已关闭
允许生产者检测所有 接收者
处理程序已被丢弃。这表明对生产出的值的兴趣不再存在,可以停止工作。
线程安全
两者 发送者
和 接收者
都是线程安全的。它们可以被移动到其他线程,并且可以在并发环境中使用。可能需要将 接收者
处理程序的副本移动到单独的线程,并且可以并发使用。
依赖项
~135KB