跳到主要内容

OwnedPermit

搜索

结构体 OwnedPermit 

Source
pub struct OwnedPermit<T> { /* private fields */ }
展开描述

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

除了 它会移动 sender 而不是借用它 之外, 这与 Permit 类型 相同。

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

实现§

Source§

impl<T> OwnedPermit<T>

Source

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

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

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

与 Permit::send 不同,此方法返回保留 OwnedPermit 的 Sender。

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

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();
Source

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));
Source

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

如果此许可证与给定的 Sender 属于同一通道则返回 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 实现§

Source§

impl<T> Debug for OwnedPermit<T>

Source§

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

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

impl<T> Drop for OwnedPermit<T>

Source§

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 实现§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
Source§

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

Source§

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

Mutably borrows from an owned value. 更多信息
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

原样返回传入的参数。

Source§

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

Source§

fn into(self) -> U

调用 U::from(self)

也就是说,此转换的具体行为取决于 From<T> for U 的实现方式。

Source§

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

Source§

type Error = Infallible

转换出错时返回的类型。
Source§

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

执行转换。
Source§

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

Source§

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

转换出错时返回的类型。
Source§

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

执行转换。