[][src]Crate wait_for_me

This library provide an implementation of an async CountDownLatch, which keeps a counter syncronized via [Lock][async-lock::Lock] in it's internal state and allows tasks to wait until the counter reaches zero.

Example

use wait_for_me::CountDownLatch;
use smol::{self,Task};
fn main() -> Result<(), Box<std::error::Error>> {
   smol::run(async {
        let latch = CountDownLatch::new(1);
        let latch1 = latch.clone();
        Task::spawn(async move {
            latch1.count_down().await;
        }).detach();
        latch.wait().await;
        Ok(())
   })

}

With timeout

use wait_for_me::CountDownLatch;
use smol::{Task,Timer};
use std::time::Duration;
#[smol_potat::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
   let latch = CountDownLatch::new(10);
   for _ in 0..10 {
       let latch1 = latch.clone();
       Task::spawn(async move {
           Timer::after(Duration::from_secs(3)).await;
           latch1.count_down().await;
       }).detach();
   }
   let result = latch.wait_for(Duration::from_secs(1)).await;

   assert_eq!(false,result);

   Ok(())
}

Structs

CountDownLatch

A syncronization primitive that allow one or more tasks to wait untile the given counter reaches zero. This is an async port of CountDownLatch in Java.