我需要帮助来理解borrow()和borrow_and_update(),两者看起来都与我相似。
#[tokio::main]
async fn main() {
use tokio::sync::watch;
use tokio::time::{Duration, sleep};
let (tx, mut rx) = watch::channel("hello");
let mut rx2 = tx.subscribe();
tokio::spawn(async move {
loop {
println!("{}! ", *rx2.borrow_and_update());
if rx.changed().await.is_err() {
break;
}
}
});
sleep(Duration::from_millis(1000)).await;
tx.send("world").unwrap();
sleep(Duration::from_millis(1000)).await;
}
这是我正在使用的示例,使用
borrow()
和 borrow_and_update()
时我看不出有任何区别。borrow_and_seen()
将标记所见的值,而 borrow
则不会。文档中有一个 专门的部分介绍何时使用 which:
与borrow_and_update
borrow
的通知,changed
应该优先于Receiver::borrow_and_update()
。这避免了新值出现的潜在竞争 在Receiver::borrow()
准备就绪和正在读取值之间发送。 (如果 使用changed
,循环可能会以相同的值运行两次。)Receiver::borrow()
如果接收者只对当前值感兴趣,并不打算 等待更改,然后可以使用
。可能会更多 使用起来很方便Receiver::borrow()
因为它是borrow
方法—&self
需要borrow_and_update
。&mut self