Spec-Zone.ru › Tokio

Структура OwnedPermit

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

Владеющий разрешением на отправку одного значения в канал.

Этот тип идентичен типу Permit, за исключением того, что он перемещает отправителя, а не заимствует его.

Значения OwnedPermit возвращаются методами Sender::reserve_owned() и Sender::try_reserve_owned() и используются для гарантирования ёмкости канала до создания сообщения для отправки.

Реализации

impl<T> OwnedPermit<T>

pub fn send(self, value: T) -> Sender<T>

Отправляет значение, используя зарезервированную ёмкость.

Ёмкость для сообщения уже зарезервирована. Сообщение отправляется получателю, а разрешение расходуется. Операция будет успешной, даже если принимающая сторона была закрыта. Подробнее о корректном завершении работы см. в Receiver::close.

В отличие от Permit::send, этот метод возвращает Sender, у которого было зарезервировано OwnedPermit.

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

let (tx, mut rx) = mpsc::channel(1);

// Reserve capacity
let permit = tx.reserve_owned().await.unwrap();

// Send a message on the permit, returning the sender.
let tx = permit.send(456);

// The value sent on the permit is received
assert_eq!(rx.recv().await.unwrap(), 456);

// We may now reuse `tx` to send another message.
tx.send(789).await.unwrap();

pub fn release(self) -> Sender<T>

Освобождает зарезервированную ёмкость, не отправляя сообщение, и возвращает Sender.

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

let (tx, rx) = mpsc::channel(1);

// Clone the sender and reserve capacity
let permit = tx.clone().reserve_owned().await.unwrap();

// Trying to send on the original `tx` will fail, since the `permit`
// has reserved all the available capacity.
assert!(tx.try_send(123).is_err());

// Release the permit without sending a message, returning the clone
// of the sender.
let tx2 = permit.release();

// We may now reuse `tx` to send another message.
tx.send(789).await.unwrap();

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

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

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

let (tx, rx) = mpsc::channel::<()>(2);

let permit1 = tx.clone().reserve_owned().await.unwrap();
let permit2 = tx.clone().reserve_owned().await.unwrap();
assert!(permit1.same_channel(&permit2));

let (tx2, rx2) = mpsc::channel::<()>(1);

let permit3 = tx2.clone().reserve_owned().await.unwrap();
assert!(!permit3.same_channel(&permit2));

pub fn same_channel_as_sender(&self, sender: &Sender<T>) -> bool

Возвращает true, если это разрешение принадлежит тому же каналу, что и указанный Sender.

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

let (tx, rx) = mpsc::channel::<()>(1);

let permit = tx.clone().reserve_owned().await.unwrap();
assert!(permit.same_channel_as_sender(&tx));

let (tx2, rx2) = mpsc::channel::<()>(1);
assert!(!permit.same_channel_as_sender(&tx2));

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

impl<T> Debug for OwnedPermit<T>

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

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

impl<T> Drop for OwnedPermit<T>

fn drop(&mut self)

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

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

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

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

impl<T> Freeze for OwnedPermit<T>

impl<T> RefUnwindSafe for OwnedPermit<T>

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

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

impl<T> Unpin for OwnedPermit<T>

impl<T> UnsafeUnpin for OwnedPermit<T>

impl<T> UnwindSafe for OwnedPermit<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> 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, 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> ⓘ

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

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

Spec-Zone.ru

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