Структура Owned Permit
pub struct OwnedPermit<T> { /* private fields */ }
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>
impl<T> Drop for OwnedPermit<T>
Автоматические реализации трейтов
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> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/mpsc/struct.OwnedPermit.html