Struct Ref
struct Ref<'a, T> { ... }
Returns a reference to the inner value.
Outstanding borrows hold a read lock on the inner value. This means that
long-lived borrows could cause the producer half to block. It is recommended
to keep the borrow as short-lived as possible. Additionally, if you are
running in an environment that allows !Send futures, you must ensure that
the returned Ref type is never held alive across an .await point,
otherwise, it can lead to a deadlock.
The priority policy of the lock is dependent on the underlying lock
implementation, and this type does not guarantee that any particular policy
will be used. In particular, a producer which is waiting to acquire the lock
in send might or might not block concurrent calls to borrow, e.g.:
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(); |
Implementations
impl<'a, T> Ref<'a, T>
fn has_changed(self: &Self) -> boolIndicates if the borrowed value is considered as changed since the last time it has been marked as seen.
Unlike [
Receiver::has_changed()], this method does not fail if the channel is closed.When borrowed from the
Senderthis function will always returnfalse.Examples
use watch; async
impl<'a, T> Freeze for Ref<'a, T>
impl<'a, T> RefUnwindSafe for Ref<'a, T>
impl<'a, T> Send for Ref<'a, T>
impl<'a, T> Sync for Ref<'a, T>
impl<'a, T> Unpin for Ref<'a, T>
impl<'a, T> UnwindSafe for Ref<'a, T>
impl<'a, T: $crate::fmt::Debug> Debug for Ref<'a, T>
fn fmt(self: &Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl<P, T> Receiver for Ref<'a, T>
impl<T> Any for Ref<'a, T>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Ref<'a, T>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Ref<'a, T>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> Deref for Ref<'_, T>
fn deref(self: &Self) -> &T
impl<T> From for Ref<'a, T>
fn from(t: T) -> TReturns the argument unchanged.
impl<T, U> Into for Ref<'a, T>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Ref<'a, T>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Ref<'a, T>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>