co_managed

Crates.ioco_managed
lib.rsco_managed
version0.1.0
sourcesrc
created_at2024-02-28 05:03:47.107191
updated_at2024-02-28 05:03:47.107191
descriptionCreate managed sub coroutines. Managed sub coroutines will be cancelled when the parent exit
homepagehttps://github.com/Xudong-Huang/co_managed.git
repositoryhttps://github.com/Xudong-Huang/co_managed.git
max_upload_size
id1156083
size27,105
Xudong Huang (Xudong-Huang)

documentation

https://docs.rs/co_managed

README

co_managed

This lib could create managed sub coroutines.

Managed sub coroutines will be cancelled when their parent exit. This is something like the scoped coroutine creation, the difference is that we manage the sub coroutines in a hash map, so that when sub coroutine exit the entry will be removed dynamically and parent doesn't wait it's children exit.

Build Status Current Crates.io Version Document

Usage

First, add this to your Cargo.toml:

[dependencies]
co_managed = "0.1"

Then just simply implement your http service

use may::{go, coroutine};
use co_managed::Manager;
use std::time::Duration;
fn main() {
    let j = go!(|| {
        println!("parent started");
        let manager = Manager::new();
        struct Dummy(usize);
        impl Drop for Dummy {
            fn drop(&mut self) {
                println!("co dropped, id={}", self.0);
            }
        }
        for i in 0..10 {
            manager.add(move |_| {
                let d = Dummy(i);
                println!("sub started, id = {}", d.0);
                loop {
                    coroutine::sleep(Duration::from_millis(10));
                }
            });
        }
        coroutine::park();
    });

    coroutine::sleep(Duration::from_millis(100));
    unsafe { j.coroutine().cancel() };
    j.join().ok();
    println!("parent exit");
    coroutine::sleep(Duration::from_millis(1000));
}

License

This project is licensed under either of the following, at your option:

Commit count: 0

cargo fmt