pub fn channel<T>() -> (Sender<T>, Receiver<T>)
Expand description

Creates a new one-shot channel for sending a single value across asynchronous tasks.

The channel works for a spsc (single-producer, single-consumer) scheme.

This function is similar to Rust’s channel constructor found in the standard library. Two halves are returned, the first of which is a Sender handle, used to signal the end of a computation and provide its value. The second half is a Receiver which implements the Future trait, resolving to the value that was given to the Sender handle.

Each half can be separately owned and sent across tasks.

Examples

use futures::channel::oneshot;
use std::{thread, time::Duration};

let (sender, receiver) = oneshot::channel::<i32>();

thread::spawn(|| {
    println!("THREAD: sleeping zzz...");
    thread::sleep(Duration::from_millis(1000));
    println!("THREAD: i'm awake! sending.");
    sender.send(3).unwrap();
});

println!("MAIN: doing some useful stuff");

futures::executor::block_on(async {
    println!("MAIN: waiting for msg...");
    println!("MAIN: got: {:?}", receiver.await)
});