Skip to main content

WaitGroup

Struct WaitGroup 

Source
pub struct WaitGroup { /* private fields */ }
Expand description

WaitGroup is a synchronization primitive that allows to wait until all tasks are completed.

§The difference between WaitGroup and LocalWaitGroup

The WaitGroup works with shared tasks and can be shared between threads.

Read Executor for more details.

§Example

use std::time::Duration;
use std::sync::atomic::{AtomicUsize, Ordering::SeqCst};
use orengine::sleep;
use orengine::sync::{shared_scope, AsyncWaitGroup, WaitGroup};

let wait_group = WaitGroup::new();
let number_executed_tasks = AtomicUsize::new(0);

shared_scope(|scope| async {
    for i in 0..10 {
        wait_group.inc();
        scope.spawn(async {
            sleep(Duration::from_millis(i)).await;
            number_executed_tasks.fetch_add(1, SeqCst);
            wait_group.done();
        });
    }

    wait_group.wait().await; // wait until all tasks are completed
    assert_eq!(number_executed_tasks.load(SeqCst), 10);
}).await;

Implementations§

Source§

impl WaitGroup

Source

pub fn new() -> Self

Creates a new WaitGroup.

Trait Implementations§

Source§

impl AsyncWaitGroup for WaitGroup

Source§

fn add(&self, count: usize)

Adds count to the LocalWaitGroup counter. Read more
Source§

fn count(&self) -> usize

Returns the LocalWaitGroup counter. Read more
Source§

fn done(&self) -> usize

Decreases the LocalWaitGroup counter by 1 and wakes up all tasks that are waiting if the counter reaches 0. Read more
Source§

fn wait(&self) -> impl Future<Output = ()>

Waits until the LocalWaitGroup counter reaches 0. Read more
Source§

fn inc(&self)

Adds 1 to the LocalWaitGroup counter. Read more
Source§

impl Default for WaitGroup

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl RefUnwindSafe for WaitGroup

Source§

impl Send for WaitGroup

Source§

impl Sync for WaitGroup

Source§

impl UnwindSafe for WaitGroup

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.