pub struct OwnedPermit<T> { /* private fields */ }展开描述
owned 类型的 permit,用于向 channel 发送一个值。
除了
它会移动 sender
而不是借用它
之外,
这与
Permit
类型
相同。
OwnedPermit
值
由
Sender::reserve_owned()
和
Sender::try_reserve_owned()
返回,
用于
在生成要发送的消息之前
保证通道容量。
实现§
Source§impl<T> OwnedPermit<T>
impl<T> OwnedPermit<T>
Sourcepub fn send(self, value: T) -> Sender<T>
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();Sourcepub fn release(self) -> Sender<T>
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();Sourcepub fn same_channel(&self, other: &Self) -> bool
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));Sourcepub fn same_channel_as_sender(&self, sender: &Sender<T>) -> bool
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>
impl<T> Debug for OwnedPermit<T>
自动 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> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息