2次发布

0.3.1 2020年10月7日
0.3.0 2020年9月12日
0.2.0 2020年8月30日
0.1.0 2020年5月31日

#2011异步

Download history 8/week @ 2024-03-14 10/week @ 2024-03-28 10/week @ 2024-04-04 2/week @ 2024-05-23 582/week @ 2024-05-30 10/week @ 2024-06-06 6/week @ 2024-06-13 2344/week @ 2024-06-20 2252/week @ 2024-06-27

每月4,619次下载

Apache-2.0 OR MIT

16KB
157

async-watch

Build License Cargo Documentation

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

Tokiotokio::sync::watch 实现,由 Carl Lerche 编写。

许可证

async-watch 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE-APACHELICENSE-MIT


lib.rs:

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

Tokiotokio::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