pub struct WeakTx<F: Flavor + FlavorMP>(/* private fields */);Expand description
A weak reference of SenderType
Can be obtain from MTx::downgrade or MAsyncTx::downgrade. When the number of valid sender is non-zero, can try upgrade to a MTx or MAsyncTx.
Implementations§
Source§impl<F: Flavor + FlavorMP> WeakTx<F>
impl<F: Flavor + FlavorMP> WeakTx<F>
Sourcepub fn upgrade<S: SenderType<Flavor = F>>(&self) -> Option<S>
pub fn upgrade<S: SenderType<Flavor = F>>(&self) -> Option<S>
Upgrade to MTx or MAsyncTx (Only allow for mpsc or mpmc)
§Safety
Warning: You should be careful using this on a bounded channel receiver-side
(Because when the channel is full and send() blocks while no one is receiving,
will result in dead-lock)
§Example
use crossfire::*;
let (tx, rx) = mpsc::bounded_blocking::<usize>(100);
let weak_tx = tx.downgrade();
let tx_clone = weak_tx.upgrade::<MTx<_>>().unwrap();
drop(tx);
drop(tx_clone);
assert!(weak_tx.upgrade::<MTx<_>>().is_none());
assert_eq!(weak_tx.get_tx_count(), 0);
drop(rx);pub fn get_tx_count(&self) -> usize
pub fn get_rx_count(&self) -> usize
Source§impl<F> WeakTx<F>
impl<F> WeakTx<F>
Sourcepub unsafe fn send_unchecked(&self, item: F::Item)
pub unsafe fn send_unchecked(&self, item: F::Item)
Sends a message without checking channel closed first (Only available for unbounded channel)
It’s for scenario that receiver-side never exit early,
but they holds a WeakTx to re-submit message.
NOTE that it will not faster than send(),
just useful save the operation of upgrade() if you don’t care about the error.
Always success, never blocked, no return type.
§Safety
It may result in message send successfully without anyone to receive them. You have to rely on the Drop trait of the message to cleanup.