pub struct Ref<'a, T> { /* 私有字段 */ }展开描述
返回对内部值的引用。
未释放的借用会对内部值保持一个读锁。这意味着长时间存活的借用可能会导致生产者一半被阻塞。建议尽量缩短借用的生命周期。此外,如果运行在允许 !Send future 的环境中,必须确保返回的 Ref 类型不会跨越 .await 点存活,否则可能会导致死锁。
锁的优先级策略取决于底层锁实现,本类型不保证使用任何特定策略。特别是,正在等待通过 send 获取锁的生产者可能会阻塞对 borrow 的并发调用,也可能不会,例如:
Potential deadlock example
// Task 1 (on thread A) | // Task 2 (on thread B)
let _ref1 = rx.borrow(); |
| // will block
| let _ = tx.send(());
// may deadlock |
let _ref2 = rx.borrow(); |实现§
源代码§impl<'a, T> Ref<'a, T>
impl<'a, T> Ref<'a, T>
源代码pub fn has_changed(&self) -> bool
pub fn has_changed(&self) -> bool
指示自上次将借用值标记为已读取以来,该借用值是否被视为已更改。
与 Receiver::has_changed() 不同,此方法在 channel 关闭时不会失败。
从 Sender 借用时,此函数将始终返回 false。
§示例
use tokio::sync::watch;
let (tx, mut rx) = watch::channel("hello");
tx.send("goodbye").unwrap();
// The sender does never consider the value as changed.
assert!(!tx.borrow().has_changed());
// Drop the sender immediately, just for testing purposes.
drop(tx);
// Even if the sender has already been dropped...
assert!(rx.has_changed().is_err());
// ...the modified value is still readable and detected as changed.
assert_eq!(*rx.borrow(), "goodbye");
assert!(rx.borrow().has_changed());
// Read the changed value and mark it as seen.
{
let received = rx.borrow_and_update();
assert_eq!(*received, "goodbye");
assert!(received.has_changed());
// Release the read lock when leaving this scope.
}
// Now the value has already been marked as seen and could
// never be modified again (after the sender has been dropped).
assert!(!rx.borrow().has_changed());trait 实现§
自动 trait 实现§
impl<'a, T> Freeze for Ref<'a, T>
impl<'a, T> RefUnwindSafe for Ref<'a, T>where
T: RefUnwindSafe,
impl<'a, T> !Send for Ref<'a, T>
impl<'a, T> Sync for Ref<'a, T>where
T: Sync,
impl<'a, T> Unpin for Ref<'a, T>
impl<'a, T> UnsafeUnpin for Ref<'a, T>
impl<'a, T> UnwindSafe for Ref<'a, T>where
T: RefUnwindSafe,
blanket 实现§
源代码§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
源代码§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息