GitXplorerGitXplorer
p

task-group

public
33 stars
5 forks
0 issues

Commits

List of commits on branch main.
Verified
3f178b72a2b678e4c0dfd434ffe78ad6f3135522

Merge pull request #6 from pchickey/pch/join_set_exists_now

committed 2 years ago
Unverified
6ab9e450b08dbe7f02039eca282e3bf2887c0a08

README: note that JoinSet exists and is probably a better idea

committed 2 years ago
Unverified
e32a947c8509ed71909fbc8fd1651e97706f4a60

bump version to 0.2.2: no API changes, only #4 which reduces allocation sizes

committed 3 years ago
Verified
dcd20c3311a5b807c940d7b6427dd55caff3f33e

Merge pull request #4 from pchickey/pch/fix_3

committed 3 years ago
Unverified
3c9a4d78cea50874cf7f9ba6e78b91c47d4ec10c

code review suggestions from @timotree3

committed 3 years ago
Unverified
e70890f348731dab164b60a80bd5e67d5a9a62cb

avoid clone by attaching lifetime to returned future

committed 3 years ago

README

The README file for this repository.

Please use tokio::task::JoinSet instead

This crate pre-dated tokio::task::JoinSet. JoinSet is probably a better abstraction and implementation than this crate: please consider using it instead.

task-group

A small crate for managing groups of tokio tasks.

let (task_group, task_manager): (TaskGroup<Error>, TaskManager<_>) = TaskGroup::new();

task_group.clone().spawn("a task", async move {
    task_group.spawn("b task", async move {
        /* all kinds of things */
        Ok(())
    }).await.expect("spawned b");
    Ok(())
}).await.expect("spawned a");

task_manager.await.expect("everyone successful");

A TaskGroup is used to spawn a collection of tasks. The collection has two properties:

  • if any task returns an error or panicks, all tasks are terminated.
  • if the TaskManager returned by TaskGroup::new is dropped, all tasks are terminated.

A TaskManager is used to manage a collection of tasks. There are two things you can do with it:

  • TaskManager impls Future, so you can poll or await on it. It will be Ready when all tasks return Ok(()) and the associated TaskGroup is dropped (so no more tasks can be created), or when any task panicks or returns an Err(E).
  • When a TaskManager is dropped, all tasks it contains are canceled (terminated). So, if you use a combinator like tokio::time::timeout(duration, task_manager).await, all tasks will be terminated if the timeout occurs.

See examples/ and the tests in src/lib.rs for more examples.