local_sync

Module oneshot

Source
Expand description

Oneshot borrowed from tokio.

A one-shot channel is used for sending a single message between asynchronous tasks. The channel function is used to create a Sender and Receiver handle pair that form the channel.

The Sender handle is used by the producer to send the value. The Receiver handle is used by the consumer to receive the value.

Each handle can be used on separate tasks.

§Examples

use local_sync::oneshot;

#[monoio::main]
async fn main() {
    let (tx, rx) = oneshot::channel();

    monoio::spawn(async move {
        if let Err(_) = tx.send(3) {
            println!("the receiver dropped");
        }
    });

    match rx.await {
        Ok(v) => println!("got = {:?}", v),
        Err(_) => println!("the sender dropped"),
    }
}

If the sender is dropped without sending, the receiver will fail with error::RecvError:

use local_sync::oneshot;

#[monoio::main]
async fn main() {
    let (tx, rx) = oneshot::channel::<u32>();

    monoio::spawn(async move {
        drop(tx);
    });

    match rx.await {
        Ok(_) => panic!("This doesn't happen"),
        Err(_) => println!("the sender dropped"),
    }
}

Modules§

error
Oneshot error types

Structs§

Receiver
Receive a value from the associated Sender.
Sender
Sends a value to the associated Receiver.

Functions§

channel
Create a new one-shot channel for sending single values across asynchronous tasks.