[−][src]Struct tokio::sync::mpsc::Sender
Send values to the associated Receiver
.
Instances are created by the channel
function.
Methods
impl<T> Sender<T>
[src]
pub fn try_send(&mut self, message: T) -> Result<(), TrySendError<T>>
[src]
Attempts to immediately send a message on this Sender
This method differs from send
by returning immediately if the channel's
buffer is full or no receiver is waiting to acquire some data. Compared
with send
, this function has two failure cases instead of one (one for
disconnection, one for a full buffer).
This function may be paired with poll_ready
in order to wait for
channel capacity before trying to send a value.
Errors
If the channel capacity has been reached, i.e., the channel has n
buffered values where n
is the argument passed to channel
, then an
error is returned.
If the receive half of the channel is closed, either due to close
being called or the [Receiver
] handle dropping, the function returns
an error. The error includes the value passed to send
.
Examples
use tokio::sync::mpsc; #[tokio::main] async fn main() { // Create a channel with buffer size 1 let (mut tx1, mut rx) = mpsc::channel(1); let mut tx2 = tx1.clone(); tokio::spawn(async move { tx1.send(1).await.unwrap(); tx1.send(2).await.unwrap(); // task waits until the receiver receives a value. }); tokio::spawn(async move { // This will return an error and send // no message if the buffer is full let _ = tx2.try_send(3); }); let mut msg; msg = rx.recv().await.unwrap(); println!("message {} received", msg); msg = rx.recv().await.unwrap(); println!("message {} received", msg); // Third message may have never been sent match rx.recv().await { Some(msg) => println!("message {} received", msg), None => println!("the third message was never sent"), } }
pub async fn send<'_>(&'_ mut self, value: T) -> Result<(), SendError<T>>
[src]
Sends a value, waiting until there is capacity.
A successful send occurs when it is determined that the other end of the
channel has not hung up already. An unsuccessful send would be one where
the corresponding receiver has already been closed. Note that a return
value of Err
means that the data will never be received, but a return
value of Ok
does not mean that the data will be received. It is
possible for the corresponding receiver to hang up immediately after
this function returns Ok
.
Errors
If the receive half of the channel is closed, either due to close
being called or the Receiver
handle dropping, the function returns
an error. The error includes the value passed to send
.
Examples
In the following example, each call to send
will block until the
previously sent value was received.
use tokio::sync::mpsc; #[tokio::main] async fn main() { let (mut tx, mut rx) = mpsc::channel(1); tokio::spawn(async move { for i in 0..10 { if let Err(_) = tx.send(i).await { println!("receiver dropped"); return; } } }); while let Some(i) = rx.recv().await { println!("got = {}", i); } }
impl<T> Sender<T>
[src]
pub async fn send_timeout<'_>(
&'_ mut self,
value: T,
timeout: Duration
) -> Result<(), SendTimeoutError<T>>
[src]
&'_ mut self,
value: T,
timeout: Duration
) -> Result<(), SendTimeoutError<T>>
Sends a value, waiting until there is capacity, but only for a limited time.
Shares the same success and error conditions as send
, adding one more
condition for an unsuccessful send, which is when the provided timeout has
elapsed, and there is no capacity available.
Errors
If the receive half of the channel is closed, either due to close
being
called or the Receiver
handle dropping, or if the timeout specified
elapses before the capacity is available the function returns an error.
The error includes the value passed to send_timeout
.
Examples
In the following example, each call to send_timeout
will block until the
previously sent value was received, unless the timeout has elapsed.
use tokio::sync::mpsc; use tokio::time::{delay_for, Duration}; #[tokio::main] async fn main() { let (mut tx, mut rx) = mpsc::channel(1); tokio::spawn(async move { for i in 0..10 { if let Err(e) = tx.send_timeout(i, Duration::from_millis(100)).await { println!("send error: #{:?}", e); return; } } }); while let Some(i) = rx.recv().await { println!("got = {}", i); delay_for(Duration::from_millis(200)).await; } }
Trait Implementations
impl<T> Clone for Sender<T>
[src]
fn clone(&self) -> Self
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<T> Debug for Sender<T>
[src]
Auto Trait Implementations
impl<T> !RefUnwindSafe for Sender<T>
impl<T> Send for Sender<T> where
T: Send,
T: Send,
impl<T> Sync for Sender<T> where
T: Send,
T: Send,
impl<T> Unpin for Sender<T>
impl<T> !UnwindSafe for Sender<T>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
ⓘImportant traits for &'_ mut Ffn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,