跳到主要内容

UnboundedSender

搜索

结构体 UnboundedSender 

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

向关联的 UnboundedReceiver 发送值。

实例由 unbounded_channel 函数创建。

实现§

源代码§

impl<T> UnboundedSender<T>

源代码

pub fn send(&self, message: T) -> Result<(), SendError<T>>

尝试在不阻塞的情况下通过此 UnboundedSender 发送消息。

此方法未标记为 async,因为向无界 channel 发送消息永远不需要任何形式的等待。这是由于 channel 的无限容量,允许 send 操作立即完成。因此,send 方法可以在同步和异步代码中使用而不会出现问题。

如果 channel 的接收端已关闭(无论是由于调用了 close 还是 UnboundedReceiver 已被 drop),则此函数返回错误。错误包括传递给 send 的值。

源代码

pub async fn closed(&self)

当 receiver 被 drop 时完成。

这允许生产者在对所产生值的兴趣被取消时收到通知,并立即停止工作。

§取消安全性

此方法可安全取消。一旦通道关闭,它将永远保持关闭状态,并且所有对 closed 的未来调用都将立即返回。

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

let (tx1, rx) = mpsc::unbounded_channel::<()>();
let tx2 = tx1.clone();
let tx3 = tx1.clone();
let tx4 = tx1.clone();
let tx5 = tx1.clone();
tokio::spawn(async move {
    drop(rx);
});

futures::join!(
    tx1.closed(),
    tx2.closed(),
    tx3.closed(),
    tx4.closed(),
    tx5.closed()
);
println!("Receiver dropped");
源代码

pub fn is_closed(&self) -> bool

检查 channel 是否已关闭。当 UnboundedReceiver 被 drop,或调用 UnboundedReceiver::close 方法时,会发生这种情况。

let (tx, rx) = tokio::sync::mpsc::unbounded_channel::<()>();
assert!(!tx.is_closed());

let tx2 = tx.clone();
assert!(!tx2.is_closed());

drop(rx);
assert!(tx.is_closed());
assert!(tx2.is_closed());
源代码

pub fn same_channel(&self, other: &Self) -> bool

如果这些 sender 属于同一个通道,则返回 true

§示例
let (tx, rx) = tokio::sync::mpsc::unbounded_channel::<()>();
let  tx2 = tx.clone();
assert!(tx.same_channel(&tx2));

let (tx3, rx3) = tokio::sync::mpsc::unbounded_channel::<()>();
assert!(!tx3.same_channel(&tx2));
源代码

pub fn downgrade(&self) -> WeakUnboundedSender<T>

UnboundedSender 转换为 WeakUnboundedSender,后者不计入 RAII 语义,即如果 channel 的所有 UnboundedSender 实例都已被 drop,仅剩下 WeakUnboundedSender 实例,则 channel 关闭。

源代码

pub fn strong_count(&self) -> usize

返回 UnboundedSender 句柄的数量。

源代码

pub fn weak_count(&self) -> usize

返回 WeakUnboundedSender 句柄的数量。

trait 实现§

源代码§

impl<T> Clone for UnboundedSender<T>

源代码§

fn clone(&self) -> Self

返回值的副本。 更多信息
1.0.0 · 源代码§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. 更多信息
源代码§

impl<T> Debug for UnboundedSender<T>

源代码§

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

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

自动 trait 实现§

§

impl<T> Freeze for UnboundedSender<T>

§

impl<T> RefUnwindSafe for UnboundedSender<T>

§

impl<T> Send for UnboundedSender<T>
where T: Send,

§

impl<T> Sync for UnboundedSender<T>
where T: Send,

§

impl<T> Unpin for UnboundedSender<T>

§

impl<T> UnsafeUnpin for UnboundedSender<T>

§

impl<T> UnwindSafe for UnboundedSender<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> CloneToUninit for T
where T: Clone,

源代码§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 更多信息
源代码§

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> ToOwned for T
where T: Clone,

源代码§

type Owned = T

获得所有权后的类型。
源代码§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. 更多信息
源代码§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 更多信息
源代码§

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>

执行转换。