- Rename corex -> mytheclipse (corex name taken on crates.io by an unrelated crate published by David-Kunz in 2023) - Flatten corex + corex-core workspace into a single crate; all modules (context/error/io/compute/bg) now live directly under src/ - Update Cargo.toml metadata: real repo URL, docs.rs, author - Update README, example, doc comments, tracing span names - Fix CI: single package dry-run (corex-core no longer separate) - Fix publish workflow: single cargo publish step
42 lines
1.4 KiB
Rust
42 lines
1.4 KiB
Rust
//! Demonstrates `mytheclipse`'s three execution primitives end to end, including
|
|
//! automatic recovery from a panicking compute closure.
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
let ctx = mytheclipse::init();
|
|
println!(
|
|
"engine context: io_threads={} compute_threads={} bg_concurrency={}",
|
|
ctx.io_threads, ctx.compute_threads, ctx.bg_concurrency
|
|
);
|
|
|
|
let io_handle = mytheclipse::spawn_io(async {
|
|
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
|
|
42u64
|
|
});
|
|
|
|
let sum_result = mytheclipse::compute(|| (1..=1_000u64).sum::<u64>());
|
|
|
|
let panic_result: Result<u64, mytheclipse::CorexError> = mytheclipse::compute(|| {
|
|
panic!("intentional panic to demonstrate isolation");
|
|
});
|
|
|
|
let recovery_result = mytheclipse::compute(|| 2u64 + 2u64);
|
|
|
|
let bg_handle = mytheclipse::spawn_bg(async {
|
|
tokio::time::sleep(std::time::Duration::from_millis(10)).await;
|
|
"bg-task-done"
|
|
})
|
|
.await;
|
|
|
|
let io_value = io_handle.await.expect("io task panicked");
|
|
let bg_value = bg_handle.await.expect("bg task panicked");
|
|
|
|
println!("spawn_io result: {io_value}");
|
|
println!("compute sum result: {sum_result:?}");
|
|
println!("compute panic-isolation result: {panic_result:?}");
|
|
println!("compute pool still usable after panic: {recovery_result:?}");
|
|
println!("spawn_bg result: {bg_value}");
|
|
}
|