3 unstable releases
new 0.2.1 | Dec 19, 2024 |
---|---|
0.2.0 | Dec 19, 2024 |
0.1.0 | Feb 28, 2024 |
#326 in Asynchronous
Used in may_rpc
9KB
126 lines
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.
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:
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT License (LICENSE-MIT or http://opensource.org/licenses/MIT)
Dependencies
~3–28MB
~424K SLoC