2 unstable releases

0.2.0 Mar 8, 2022
0.1.0 Sep 6, 2018

#1066 in Asynchronous

Download history 4072/week @ 2024-03-14 3770/week @ 2024-03-21 3671/week @ 2024-03-28 2773/week @ 2024-04-04 3366/week @ 2024-04-11 2914/week @ 2024-04-18 2551/week @ 2024-04-25 2914/week @ 2024-05-02 2679/week @ 2024-05-09 2877/week @ 2024-05-16 2571/week @ 2024-05-23 2887/week @ 2024-05-30 3097/week @ 2024-06-06 3006/week @ 2024-06-13 3014/week @ 2024-06-20 3137/week @ 2024-06-27

12,849 downloads per month
Used in 8 crates

MIT license

15KB
287 lines

tokio-scoped

tokio-scoped provides a scope function inspired by crossbeam but for the tokio Runtime. A scope allows one to spawn futures which do not have a 'static lifetime by ensuring each future spawned in the scope completes before the scope exits.

Example

#[tokio::main]
async fn main() {
    let mut v = String::from("Hello");
    tokio_scoped::scope(|scope| {
        // Use the scope to spawn the future.
        scope.spawn(async {
            v.push('!');
        });
    });
    // The scope won't exit until all spawned futures are complete.
    assert_eq!(v.as_str(), "Hello!");
}

lib.rs:

A scoped tokio Runtime that can be used to create Scopes which can spawn futures which can access stack data. That is, the futures spawned by the Scope do not require the 'static lifetime bound. This can be done safely by ensuring that the Scope doesn't exit until all spawned futures have finished executing. Be aware, that when a Scope exits it will block until every future spawned by the Scope completes. Therefore, one should take caution when created scopes within an asynchronous context, such as from within another spawned future.

Example

#[tokio::main]
async fn main() {
    let mut v = String::from("Hello");
    tokio_scoped::scope(|scope| {
        // Use the scope to spawn the future.
        scope.spawn(async {
            v.push('!');
        });
    });
    // The scope won't exit until all spawned futures are complete.
    assert_eq!(v.as_str(), "Hello!");
}

See also crossbeam::scope

Dependencies

~2.2–3.5MB
~51K SLoC