我需要帮助来理解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()
and时我看不出有任何区别borrow_and_update()
。
我已阅读文档,其中说borrow_and_seen()
会将值标记为所见,而borrow
不会。
任何人都可以通过给出一个合适的例子来帮助我理解这两个。
文档中有一个专门的部分介绍何时使用 which:
给出一个一致地重现运行两次的循环的例子是很困难的,因为它依赖于一致地达到竞争条件。