Spec-Zone.ru › Tokio

Структура Sender

pub struct Sender<T> { /* private fields */ }
Доступно только при включённой возможности crate sync.

Отправляющая половина канала broadcast.

Может использоваться из множества потоков. Сообщения можно отправлять с помощью send.

Примеры

use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();

tokio::spawn(async move {
    assert_eq!(rx1.recv().await.unwrap(), 10);
    assert_eq!(rx1.recv().await.unwrap(), 20);
});

tokio::spawn(async move {
    assert_eq!(rx2.recv().await.unwrap(), 10);
    assert_eq!(rx2.recv().await.unwrap(), 20);
});

tx.send(10).unwrap();
tx.send(20).unwrap();

Реализации

impl<T> Sender<T>

pub fn new(capacity: usize) -> Self

Создаёт передающую половину канала broadcast.

Дополнительную информацию об этом методе см. в документации к broadcast::channel.

pub fn send(&self, value: T) -> Result<usize, SendError<T>>

Пытается отправить значение всем активным дескрипторам Receiver, возвращая его, если отправить его не удалось.

Отправка считается успешной, если существует хотя бы один активный дескриптор Receiver. Отправка завершается неудачей, если все связанные с каналом дескрипторы Receiver уже были удалены.

Возвращаемое значение

В случае успеха возвращается количество подписанных дескрипторов Receiver. Это не означает, что сообщение получат все эти получатели: получатель может быть удалён или отстать (см. раздел об отставании) до получения сообщения.

Примечание

Возвращаемое значение Ok не означает, что отправленное значение увидит любой или все активные дескрипторы Receiver. Дескрипторы Receiver могут быть удалены до получения отправленного сообщения.

Возвращаемое значение Err не означает, что последующие вызовы send завершатся неудачей. Новые дескрипторы Receiver можно создать, вызвав subscribe.

Примеры
use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();

tokio::spawn(async move {
    assert_eq!(rx1.recv().await.unwrap(), 10);
    assert_eq!(rx1.recv().await.unwrap(), 20);
});

tokio::spawn(async move {
    assert_eq!(rx2.recv().await.unwrap(), 10);
    assert_eq!(rx2.recv().await.unwrap(), 20);
});

tx.send(10).unwrap();
tx.send(20).unwrap();

pub fn subscribe(&self) -> Receiver<T>

Создаёт новый дескриптор Receiver, который будет получать значения, отправленные после этого вызова subscribe.

Примеры
use tokio::sync::broadcast;

let (tx, _rx) = broadcast::channel(16);

// Will not be seen
tx.send(10).unwrap();

let mut rx = tx.subscribe();

tx.send(20).unwrap();

let value = rx.recv().await.unwrap();
assert_eq!(20, value);

pub fn downgrade(&self) -> WeakSender<T>

Преобразует Sender в WeakSender, который не учитывается семантикой RAII: если все экземпляры Sender канала будут удалены, а останутся только экземпляры WeakSender, канал будет закрыт.

pub fn len(&self) -> usize

Возвращает количество значений в очереди.

Значение остаётся в очереди, пока его не получат все получатели, активные на момент отправки, или пока оно не будет вытеснено из очереди последующими отправками, превысившими её ёмкость.

Примечание

В отличие от Receiver::len, этот метод сообщает только о значениях в очереди и не учитывает значения, вытесненные из очереди до того, как их получили все получатели.

Примеры
use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();

tx.send(10).unwrap();
tx.send(20).unwrap();
tx.send(30).unwrap();

assert_eq!(tx.len(), 3);

rx1.recv().await.unwrap();

// The len is still 3 since rx2 hasn't seen the first value yet.
assert_eq!(tx.len(), 3);

rx2.recv().await.unwrap();

assert_eq!(tx.len(), 2);

pub fn is_empty(&self) -> bool

Возвращает true, если в очереди нет значений.

Примеры
use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel(16);
let mut rx2 = tx.subscribe();

assert!(tx.is_empty());

tx.send(10).unwrap();

assert!(!tx.is_empty());

rx1.recv().await.unwrap();

// The queue is still not empty since rx2 hasn't seen the value.
assert!(!tx.is_empty());

rx2.recv().await.unwrap();

assert!(tx.is_empty());

pub fn receiver_count(&self) -> usize

Возвращает количество активных получателей.

Активный получатель — это дескриптор Receiver, возвращённый функцией channel или subscribe. Именно эти дескрипторы будут получать значения, отправленные через этот Sender.

Примечание

Нет гарантии, что отправленное сообщение дойдёт до такого количества получателей. Активные получатели могут больше не вызывать recv до удаления.

Примеры
use tokio::sync::broadcast;

let (tx, _rx1) = broadcast::channel(16);

assert_eq!(1, tx.receiver_count());

let mut _rx2 = tx.subscribe();

assert_eq!(2, tx.receiver_count());

tx.send(10).unwrap();

pub fn same_channel(&self, other: &Self) -> bool

Возвращает true, если отправители принадлежат одному каналу.

Примеры
use tokio::sync::broadcast;

let (tx, _rx) = broadcast::channel::<()>(16);
let tx2 = tx.clone();

assert!(tx.same_channel(&tx2));

let (tx3, _rx3) = broadcast::channel::<()>(16);

assert!(!tx3.same_channel(&tx2));

pub async fn closed(&self)

Будущее, которое завершается, когда число подписанных на этот Sender получателей становится равным нулю.

Примеры
use futures::FutureExt;
use tokio::sync::broadcast;

let (tx, mut rx1) = broadcast::channel::<u32>(16);
let mut rx2 = tx.subscribe();

let _ = tx.send(10);

assert_eq!(rx1.recv().await.unwrap(), 10);
drop(rx1);
assert!(tx.closed().now_or_never().is_none());

assert_eq!(rx2.recv().await.unwrap(), 10);
drop(rx2);
assert!(tx.closed().now_or_never().is_some());

pub fn strong_count(&self) -> usize

Возвращает число дескрипторов Sender.

pub fn weak_count(&self) -> usize

Возвращает число дескрипторов WeakSender.

Реализации трейтов

impl<T> Clone for Sender<T>

fn clone(&self) -> Sender<T>

Возвращает копию значения. Подробнее
1.0.0 (const: unstable) ·

fn clone_from(&mut self, source: &Self)

Выполняет копирующее присваивание из source. Подробнее

impl<T> Debug for Sender<T>

fn fmt(&self, fmt: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

impl<T> Drop for Sender<T>

fn drop(&mut self)

Выполняет деструктор для этого типа. Подробнее

fn pin_drop(self: Pin<&mut Self>)

🔬Это экспериментальный API, доступный только в nightly-версии. (pin_ergonomics)
Выполняет деструктор для этого типа, но, в отличие от Drop::drop, требует, чтобы self был закреплён. Подробнее

Автоматические реализации трейтов

impl<T> !RefUnwindSafe for Sender<T>

impl<T> !UnwindSafe for Sender<T>

impl<T> Freeze for Sender<T>

impl<T> Send for Sender<T>
where T: Send,

impl<T> Sync for Sender<T>
where T: Send,

impl<T> Unpin for Sender<T>

impl<T> UnsafeUnpin for Sender<T>

Общие реализации

impl<T> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Получает TypeId у self. Подробнее

impl<T> Borrow<T> for T
where T: ?Sized,

fn borrow(&self) -> &T

Неизменяемо заимствует данные из принадлежащего значения. Подробнее

impl<T> BorrowMut<T> for T
where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

Изменяемо заимствует данные из принадлежащего значения. Подробнее

impl<T> CloneToUninit for T
where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬Это экспериментальный API, доступный только в nightly. (clone_to_uninit)
Выполняет копирующее присваивание из self в dest. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью предоставленного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

impl<T, U> Into<U> for T
where U: From<T>,

fn into(self) -> U

Вызывает U::from(self).

То есть это преобразование выполняет то, что выберет реализация From<T> for U.

impl<T> ToOwned for T
where T: Clone,

type Owned = T

Тип, получаемый после обретения владения.

fn to_owned(&self) -> T

Создаёт владеющие данные из заимствованных данных, обычно путём клонирования. Подробнее

fn clone_into(&self, target: &mut T)

Использует заимствованные данные для замены владеющих данных, обычно путём клонирования. Подробнее

impl<T, U> TryFrom<U> for T
where U: Into<T>,

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Выполняет преобразование.

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

Тип, возвращаемый в случае ошибки преобразования.

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу и возвращает оболочку WithDispatch. Подробнее

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Присоединяет текущий по умолчанию Subscriber к этому типу и возвращает оболочку WithDispatch. Подробнее

MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/broadcast/struct.Sender.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API