1 个不稳定版本

0.2.0 2023年9月17日

#2123 in 异步

MIT 许可证

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 的分支。

仅保留 最后一个 发送值的单生产者、多消费者通道。

Tokiotokio::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处理句柄已被释放。这表明对产生的值不再感兴趣,可以停止工作。

线程安全

SenderReceiver都是线程安全的。它们可以被移动到其他线程,并可以在并发环境中使用。接收者句柄的克隆可以被移动到不同的线程,并可以并发使用。

依赖

~135KB