pub struct WeakSender<T> { /* private fields */ }
sync
only.Expand description
A sender that does not prevent the channel from being closed.
If all Sender
instances of a channel were dropped and only WeakSender
instances remain, the channel is closed.
In order to send messages, the WeakSender
needs to be upgraded using
WeakSender::upgrade
, which returns Option<Sender>
. It returns None
if all Sender
s have been dropped, and otherwise it returns a Sender
.
§Examples
use tokio::sync::mpsc::channel;
#[tokio::main]
async fn main() {
let (tx, _rx) = channel::<i32>(15);
let tx_weak = tx.downgrade();
// Upgrading will succeed because `tx` still exists.
assert!(tx_weak.upgrade().is_some());
// If we drop `tx`, then it will fail.
drop(tx);
assert!(tx_weak.clone().upgrade().is_none());
}
Implementations§
Source§impl<T> WeakSender<T>
impl<T> WeakSender<T>
Sourcepub fn upgrade(&self) -> Option<Sender<T>>
pub fn upgrade(&self) -> Option<Sender<T>>
Tries to convert a WeakSender
into a Sender
. This will return Some
if there are other Sender
instances alive and the channel wasn’t
previously dropped, otherwise None
is returned.
Sourcepub fn strong_count(&self) -> usize
pub fn strong_count(&self) -> usize
Returns the number of Sender
handles.
Sourcepub fn weak_count(&self) -> usize
pub fn weak_count(&self) -> usize
Returns the number of WeakSender
handles.
Trait Implementations§
Source§impl<T> Clone for WeakSender<T>
impl<T> Clone for WeakSender<T>
Source§impl<T> Debug for WeakSender<T>
impl<T> Debug for WeakSender<T>
Auto Trait Implementations§
impl<T> Freeze for WeakSender<T>
impl<T> RefUnwindSafe for WeakSender<T>
impl<T> Send for WeakSender<T>where
T: Send,
impl<T> Sync for WeakSender<T>where
T: Send,
impl<T> Unpin for WeakSender<T>
impl<T> UnwindSafe for WeakSender<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 8 bytes