跳到主要内容

OwnedPermit

搜索

结构体 OwnedPermit 

源代码
pub struct OwnedPermit<T> { /* 私有字段 */ }
展开描述

用于向 channel 发送一个值的 owned permit。

这与 Permit 类型相同,只是它移动 sender 而不是借用它。

OwnedPermit 值由 Sender::reserve_owned()Sender::try_reserve_owned() 返回,用于在生成要发送的消息之前保证 channel 容量。

实现§

源代码§

impl<T> OwnedPermit<T>

源代码

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

使用预留的容量发送一个值。

消息的容量已被预留。消息被发送到 receiver,并且许可被消费。即使 receiver 半部分已关闭,此操作也会成功。有关执行干净关闭的更多详细信息,请参阅 Receiver::close

Permit::send 不同,此方法返回预留 OwnedPermitSender

§示例
use tokio::sync::mpsc;

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

// 预留容量
let permit = tx.reserve_owned().await.unwrap();

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

// 接收在 permit 上发送的值
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

如果这些 permit 属于同一个 channel,则返回 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

如果此 permit 与给定的 Sender 属于同一个 channel,则返回 true

§示例
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));

trait 实现§

源代码§

impl<T> Debug for OwnedPermit<T>

源代码§

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

使用给定的格式化器格式化此值。 更多信息
源代码§

impl<T> Drop for OwnedPermit<T>

源代码§

fn drop(&mut self)

执行此类型的析构函数。 更多信息

自动 trait 实现§

§

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>

blanket 实现§

源代码§

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

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

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

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

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

源代码§

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

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

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>

执行转换。