#counter #future #async #value #shared #tasks #await

async_counter

Counter that implements a future to await on specific value

4 releases

0.1.3 May 17, 2024
0.1.2 May 15, 2024
0.1.1 May 15, 2024
0.1.0 Apr 18, 2024

#608 in Asynchronous

Download history 123/week @ 2024-11-15 160/week @ 2024-11-22 159/week @ 2024-11-29 157/week @ 2024-12-06 127/week @ 2024-12-13 116/week @ 2024-12-20 174/week @ 2024-12-27 107/week @ 2025-01-03 81/week @ 2025-01-10 145/week @ 2025-01-17 151/week @ 2025-01-24 178/week @ 2025-01-31 130/week @ 2025-02-07 102/week @ 2025-02-14 152/week @ 2025-02-21 133/week @ 2025-02-28

530 downloads per month

MIT/Apache

8KB
134 lines

This crate provides a counter that can be shared among different tasks and can be awaited until it reaches a specified value.

Consider the following scenario. Several asynchronous tasks are incrementing/decrementing a shared value. At the same time, another task needs to ensure that the shared value reaches at least a specific target. The following code demonstrates how to use the Counter in a simplified scenario. One child task increments the shared value, while the main task awaits it to reach a specific target.

let counter = Counter::to(10);
let mut count = counter.clone();

// Spawn a task to update the counter.
tokio::spawn(async move { 
    for i in 0u8..20 {
        // Simulate some processing
        time::sleep(Duration::from_secs(1)).await;
        count = count + 5;
        // or
        // count += 5;
    } 
});

// Wait for the target to be satisfied.
counter.await; 

No runtime deps