pub struct OwnedPermit<T> { /* 私有字段 */ }展开描述
用于向 channel 发送一个值的 owned permit。
这与 Permit 类型相同,只是它移动 sender 而不是借用它。
OwnedPermit 值由 Sender::reserve_owned() 和 Sender::try_reserve_owned() 返回,用于在生成要发送的消息之前保证 channel 容量。
实现§
源代码§impl<T> OwnedPermit<T>
impl<T> OwnedPermit<T>
源代码pub fn send(self, value: T) -> Sender<T>
pub fn send(self, value: T) -> Sender<T>
使用预留的容量发送一个值。
消息的容量已被预留。消息被发送到 receiver,并且许可被消费。即使 receiver 半部分已关闭,此操作也会成功。有关执行干净关闭的更多详细信息,请参阅 Receiver::close。
与 Permit::send 不同,此方法返回预留 OwnedPermit 的 Sender。
§示例
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>
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
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
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>
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 实现§
源代码§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
源代码§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息