Структура Unbounded Sender
pub struct UnboundedSender<T> { /* private fields */ }
sync.Отправляет значения в связанный UnboundedReceiver.
Экземпляры создаются функцией unbounded_channel.
Реализации
impl<T> UnboundedSender<T>
pub fn send(&self, message: T) -> Result<(), SendError<T>>
Пытается отправить сообщение через этот UnboundedSender без блокировки.
Этот метод не помечен как async, поскольку отправка сообщения в неограниченный канал никогда не требует ожидания. Это возможно благодаря бесконечной ёмкости канала, позволяющей операции send завершиться немедленно. В результате метод send можно использовать как в синхронном, так и в асинхронном коде без каких-либо проблем.
Если принимающая сторона канала закрыта — либо в результате вызова close, либо потому, что UnboundedReceiver была удалена, — эта функция возвращает ошибку. Ошибка содержит значение, переданное в send.
pub async fn closed(&self)
Завершается, когда получатель удалён.
Это позволяет отправителям получать уведомление об отмене интереса к создаваемым значениям и немедленно прекращать работу.
Безопасность при отмене
Этот метод безопасен при отмене. После закрытия канал остаётся закрытым навсегда, и все последующие вызовы closed немедленно вернут управление.
Примеры
use tokio::sync::mpsc;
let (tx1, rx) = mpsc::unbounded_channel::<()>();
let tx2 = tx1.clone();
let tx3 = tx1.clone();
let tx4 = tx1.clone();
let tx5 = tx1.clone();
tokio::spawn(async move {
drop(rx);
});
futures::join!(
tx1.closed(),
tx2.closed(),
tx3.closed(),
tx4.closed(),
tx5.closed()
);
println!("Receiver dropped");pub fn is_closed(&self) -> bool
Проверяет, закрыт ли канал. Это происходит, когда UnboundedReceiver удалён или когда вызывается метод UnboundedReceiver::close.
let (tx, rx) = tokio::sync::mpsc::unbounded_channel::<()>();
assert!(!tx.is_closed());
let tx2 = tx.clone();
assert!(!tx2.is_closed());
drop(rx);
assert!(tx.is_closed());
assert!(tx2.is_closed());pub fn same_channel(&self, other: &Self) -> bool
Возвращает true, если отправители принадлежат одному каналу.
Примеры
let (tx, rx) = tokio::sync::mpsc::unbounded_channel::<()>();
let tx2 = tx.clone();
assert!(tx.same_channel(&tx2));
let (tx3, rx3) = tokio::sync::mpsc::unbounded_channel::<()>();
assert!(!tx3.same_channel(&tx2));pub fn downgrade(&self) -> WeakUnboundedSender<T>
Преобразует UnboundedSender в WeakUnboundedSender, который не учитывается в семантике RAII: если все экземпляры UnboundedSender канала удалены и остались только экземпляры WeakUnboundedSender, канал закрывается.
pub fn strong_count(&self) -> usize
Возвращает количество дескрипторов UnboundedSender.
pub fn weak_count(&self) -> usize
Возвращает количество дескрипторов WeakUnboundedSender.
Реализации трейтов
impl<T> Clone for UnboundedSender<T>
fn clone_from(&mut self, source: &Self)
source. Подробнее
Автоматические реализации трейтов
impl<T> Freeze for UnboundedSender<T>
impl<T> RefUnwindSafe for UnboundedSender<T>
impl<T> Send for UnboundedSender<T>where T: Send,
impl<T> Sync for UnboundedSender<T>where T: Send,
impl<T> Unpin for UnboundedSender<T>
impl<T> UnsafeUnpin for UnboundedSender<T>
impl<T> UnwindSafe for UnboundedSender<T>
Общие реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Twhere T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> ToOwned for Twhere T: Clone,
type Owned = T
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/mpsc/struct.UnboundedSender.html