{"id":15579022,"url":"https://github.com/dapper91/coachman-rs","last_synced_at":"2025-03-29T07:44:31.852Z","repository":{"id":46005380,"uuid":"425177818","full_name":"dapper91/coachman-rs","owner":"dapper91","description":"rust asynchronous task manager built on top of tokio framework supporting task cancellation feature","archived":false,"fork":false,"pushed_at":"2021-11-21T08:42:23.000Z","size":135,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-08T07:04:13.807Z","etag":null,"topics":["async","asynchronous","cancellable","rust","rust-lang","supervisor","task-manager","tokio"],"latest_commit_sha":null,"homepage":"https://docs.rs/coachman","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dapper91.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-11-06T06:59:22.000Z","updated_at":"2023-08-25T08:16:23.000Z","dependencies_parsed_at":"2022-08-25T09:20:34.179Z","dependency_job_id":null,"html_url":"https://github.com/dapper91/coachman-rs","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fcoachman-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fcoachman-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fcoachman-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapper91%2Fcoachman-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dapper91","download_url":"https://codeload.github.com/dapper91/coachman-rs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246156028,"owners_count":20732359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async","asynchronous","cancellable","rust","rust-lang","supervisor","task-manager","tokio"],"created_at":"2024-10-02T19:13:37.169Z","updated_at":"2025-03-29T07:44:31.835Z","avatar_url":"https://github.com/dapper91.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CoachMan\n\n![coachman](img/logo.png)\n\n`coachman` is a rust asynchronous task manager built on top of tokio framework.\n\n## Features\n\n* **Task count control:**\n  `coachman` allows you to control task count preventing your application from uncontrolled task count explosion.\n* **Task cancellation:**\n  The main feature of `coachman` is task cancellation. It provides a simple api for making your task cancelable.\n\n# Basic example\n\nThe main feature of coachman is making asynchronous tasks cancelable.\n\nLook at the following example:\n\n``` rust\nuse coachman as cm;\nuse coachman::{try_await, Canceled, Completed, TaskError};\n\nasync fn inner_func(i: usize, duration: u64) {\n   match try_await!(tokio::time::sleep(std::time::Duration::from_secs(duration))) {\n       Canceled =\u003e println!(\"task#{} inner canceled\", i),\n       Completed(_) =\u003e println!(\"task#{} inner completed\", i),\n   }\n}\n\nasync fn outer_func(i: usize, duration: u64) {\n   match try_await!(inner_func(i, duration)) {\n       Canceled =\u003e println!(\"task#{} outer canceled\", i),\n       Completed(_) =\u003e println!(\"task#{} outer completed\", i),\n   }\n}\n\n#[tokio::main(flavor = \"current_thread\")]\nasync fn main() {\n   let mut task_handles = Vec::new();\n   for i in 0..5 {\n       let duration = i as u64;\n       task_handles.push(cm::spawn(outer_func(i, duration)));\n   }\n\n   let deadline = tokio::time::Instant::now() + std::time::Duration::from_secs(2);\n   for (i, mut handle) in task_handles.into_iter().enumerate() {\n       if tokio::time::timeout_at(deadline, \u0026mut handle).await.is_ok() {\n           println!(\"task-{} completed\", i);\n       } else {\n           handle.cancel();\n           match handle.await {\n               Result::Err(TaskError::Canceled) =\u003e println!(\"task-{} canceled\", i),\n               Result::Err(TaskError::Aborted) =\u003e println!(\"task-{} aborted\", i),\n               Result::Err(TaskError::Panicked(_)) =\u003e println!(\"task-{} panicked\", i),\n               Result::Ok(_) =\u003e unreachable!(),\n           }\n       }\n   }\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapper91%2Fcoachman-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdapper91%2Fcoachman-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapper91%2Fcoachman-rs/lists"}