Struct crossbeam_channel::Receiver[][src]

pub struct Receiver<T>(_);
[]

The receiving side of a channel.

Receivers can be cloned and shared among multiple threads.

Examples

use std::thread;
use std::time::Duration;
use crossbeam_channel as channel;

let (s, r) = channel::unbounded();

thread::spawn(move || {
    s.send("Hello world!");
    thread::sleep(Duration::from_secs(2));
    s.send("Delayed for 2 seconds");
});

println!("{}", r.recv().unwrap()); // Received immediately.
println!("Waiting...");
println!("{}", r.recv().unwrap()); // Received after 2 seconds.

Methods

impl<T> Receiver<T>
[src]
[]

[]

Blocks the current thread until a message is received or the channel is closed.

Returns the message if it was received, or None if the channel is closed and empty.

If called on a zero-capacity channel, this method blocks the current thread until a send operation appears on the other side of the channel or it becomes closed.

Note: r.recv() is equivalent to select! { recv(r, msg) => msg }.

Examples

use std::thread;
use std::time::Duration;
use crossbeam_channel as channel;

let (s, r) = channel::unbounded();

thread::spawn(move || {
    thread::sleep(Duration::from_secs(1));
    s.send(5);
    // `s` gets dropped, thus closing the channel.
});

assert_eq!(r.recv(), Some(5));
assert_eq!(r.recv(), None);

[]

Attempts to receive a message from the channel without blocking.

If there is no message ready to be received, returns None.

Note: r.try_recv() is equivalent to select! { recv(r, msg) => msg, default => None }.

Examples

use crossbeam_channel as channel;

let (s, r) = channel::unbounded();
assert_eq!(r.try_recv(), None);

s.send(5);
drop(s);

assert_eq!(r.try_recv(), Some(5));
assert_eq!(r.try_recv(), None);

[]

Returns true if the channel is empty.

Note: zero-capacity channels are always empty.

Examples

use crossbeam_channel as channel;

let (s, r) = channel::unbounded();

assert!(r.is_empty());
s.send(0);
assert!(!r.is_empty());

[]

Returns true if the channel is full.

Note: zero-capacity channels are always full.

Examples

use crossbeam_channel as channel;

let (s, r) = channel::bounded(1);

assert!(!r.is_full());
s.send(0);
assert!(r.is_full());

[]

Returns the number of messages in the channel.

Examples

use crossbeam_channel as channel;

let (s, r) = channel::unbounded();
assert_eq!(r.len(), 0);

s.send(1);
s.send(2);
assert_eq!(r.len(), 2);

[]

If the channel is bounded, returns its capacity.

Examples

use crossbeam_channel as channel;

let (_, r) = channel::unbounded::<i32>();
assert_eq!(r.capacity(), None);

let (_, r) = channel::bounded::<i32>(5);
assert_eq!(r.capacity(), Some(5));

let (_, r) = channel::bounded::<i32>(0);
assert_eq!(r.capacity(), Some(0));

Trait Implementations

impl<T> PartialEq<Receiver<T>> for Sender<T>
[src]
[+]

[]

This method tests for self and other values to be equal, and is used by ==. Read more

[]

This method tests for !=.

impl<T: Send> Send for Receiver<T>
[src]

impl<T: Send> Sync for Receiver<T>
[src]

impl<T> Clone for Receiver<T>
[src]
[+]

[]

Returns a copy of the value. Read more

[]

Performs copy-assignment from source. Read more

impl<T> Debug for Receiver<T>
[src]
[+]

[]

Formats the value using the given formatter. Read more

impl<T> Hash for Receiver<T>
[src]
[+]

[]

Feeds this value into the given [Hasher]. Read more

[]

Feeds a slice of this type into the given [Hasher]. Read more

impl<T> PartialEq for Receiver<T>
[src]
[+]

[]

This method tests for self and other values to be equal, and is used by ==. Read more

[]

This method tests for !=.

impl<T> Eq for Receiver<T>
[src]

impl<T> PartialEq<Sender<T>> for Receiver<T>
[src]
[+]

[]

This method tests for self and other values to be equal, and is used by ==. Read more

[]

This method tests for !=.

impl<T> Iterator for Receiver<T>
[src]
[+]

The type of the elements being iterated over.

[]

Advances the iterator and returns the next value. Read more

[]

Returns the bounds on the remaining length of the iterator. Read more

[]

Consumes the iterator, counting the number of iterations and returning it. Read more

[]

Consumes the iterator, returning the last element. Read more

[]

Returns the nth element of the iterator. Read more

[]

🔬 This is a nightly-only experimental API. (iterator_step_by)

unstable replacement of Range::step_by

Creates an iterator starting at the same point, but stepping by the given amount at each iteration. Read more

[]

Takes two iterators and creates a new iterator over both in sequence. Read more

[]

'Zips up' two iterators into a single iterator of pairs. Read more

[]

Takes a closure and creates an iterator which calls that closure on each element. Read more

[]

Calls a closure on each element of an iterator. Read more

[]

Creates an iterator which uses a closure to determine if an element should be yielded. Read more

[]

Creates an iterator that both filters and maps. Read more

[]

Creates an iterator which gives the current iteration count as well as the next value. Read more

[]

Creates an iterator which can use peek to look at the next element of the iterator without consuming it. Read more

[]

Creates an iterator that [skip]s elements based on a predicate. Read more

[]

Creates an iterator that yields elements based on a predicate. Read more

[]

Creates an iterator that skips the first n elements. Read more

[]

Creates an iterator that yields its first n elements. Read more

[]

An iterator adaptor similar to [fold] that holds internal state and produces a new iterator. Read more

[]

Creates an iterator that works like map, but flattens nested structure. Read more

[]

🔬 This is a nightly-only experimental API. (iterator_flatten)

Creates an iterator that flattens nested structure. Read more

[]

Creates an iterator which ends after the first [None]. Read more

[]

Do something with each element of an iterator, passing the value on. Read more

[]

Borrows an iterator, rather than consuming it. Read more

[]

Transforms an iterator into a collection. Read more

[]

Consumes an iterator, creating two collections from it. Read more

[]

An iterator method that applies a function as long as it returns successfully, producing a single, final value. Read more

[]

An iterator method that applies a fallible function to each item in the iterator, stopping at the first error and returning that error. Read more

[]

An iterator method that applies a function, producing a single, final value. Read more

[]

Tests if every element of the iterator matches a predicate. Read more

[]

Tests if any element of the iterator matches a predicate. Read more

[]

Searches for an element of an iterator that satisfies a predicate. Read more

[]

🔬 This is a nightly-only experimental API. (iterator_find_map)

unstable new API

Applies function to the elements of iterator and returns the first non-none result. Read more

[]

Searches for an element in an iterator, returning its index. Read more

[]

Searches for an element in an iterator from the right, returning its index. Read more

[]

Returns the maximum element of an iterator. Read more

[]

Returns the minimum element of an iterator. Read more

[]

Returns the element that gives the maximum value from the specified function. Read more

[]

Returns the element that gives the maximum value with respect to the specified comparison function. Read more

[]

Returns the element that gives the minimum value from the specified function. Read more

[]

Returns the element that gives the minimum value with respect to the specified comparison function. Read more

[]

Reverses an iterator's direction. Read more

[]

Converts an iterator of pairs into a pair of containers. Read more

[]

Creates an iterator which [clone]s all of its elements. Read more

[]

Repeats an iterator endlessly. Read more

[]

Sums the elements of an iterator. Read more

[]

Iterates over the entire iterator, multiplying all the elements Read more

[]

Lexicographically compares the elements of this Iterator with those of another. Read more

[]

Lexicographically compares the elements of this Iterator with those of another. Read more

[]

Determines if the elements of this Iterator are equal to those of another. Read more

[]

Determines if the elements of this Iterator are unequal to those of another. Read more

[]

Determines if the elements of this Iterator are lexicographically less than those of another. Read more

[]

Determines if the elements of this Iterator are lexicographically less or equal to those of another. Read more

[]

Determines if the elements of this Iterator are lexicographically greater than those of another. Read more

[]

Determines if the elements of this Iterator are lexicographically greater than or equal to those of another. Read more

impl<T> FusedIterator for Receiver<T>
[src]

impl<'a, T> IntoIterator for &'a Receiver<T>
[src]
[+]

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

[]

Creates an iterator from a value. Read more

impl<T> UnwindSafe for Receiver<T>
[src]

impl<T> RefUnwindSafe for Receiver<T>
[src]