Skip to content

Conversation

@hmaka
Copy link
Contributor

@hmaka hmaka commented Aug 16, 2024

Adds join_all method to JoinSet. join_all consumes JoinSet and awaits the completion of all tasks on it, returning the results of the tasks in a vector. An error or panic in the task will cause join_all to panic, canceling all other tasks.

Fixes: #6664

Motivation

The goal of this PR is to add the method join_all to JoinSet in line with the discussion in Fixes: #6664.

Solution

join_all method is added, as well as tests for:

  1. Success scenario returning tasks in a vector.
  2. Failure scenario resulting in a panic and cancelation of other tasks.

@mox692 mox692 added A-tokio Area: The main tokio crate M-task Module: tokio/task labels Aug 17, 2024
Copy link
Member

@mox692 mox692 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good to me.

Copy link
Contributor

@Darksonn Darksonn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks good to me. Just some comments on the documentation.

@github-actions github-actions bot added the R-loom-sync Run loom sync tests on this PR label Aug 21, 2024
hmaka and others added 4 commits August 22, 2024 21:35
Adds join_all method to JoinSet. join_all consumes JoinSet and awaits
the completion of all tasks on it, returning the results of the tasks in
a vec. An error or panic in the task will cause join_all to panic,
canceling all other tasks.

Fixes: #6664
add #[cfg(panic = "unwind")]

Co-authored-by: Motoyuki Kimura <[email protected]>
@github-actions github-actions bot removed the R-loom-sync Run loom sync tests on this PR label Aug 23, 2024
Copy link
Member

@mox692 mox692 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few minor nits, but other than that look good to me!

hmaka and others added 2 commits August 23, 2024 09:33
Co-authored-by: Motoyuki Kimura <[email protected]>
Co-authored-by: Motoyuki Kimura <[email protected]>
@mox692 mox692 merged commit cc70a21 into tokio-rs:master Aug 26, 2024
kodiakhq bot pushed a commit to pdylanross/fatigue that referenced this pull request Aug 30, 2024
Bumps tokio from 1.39.3 to 1.40.0.

Release notes
Sourced from tokio's releases.

Tokio v1.40.0
1.40.0 (August 30th, 2024)
Added

io: add util::SimplexStream (#6589)
process: stabilize Command::process_group (#6731)
sync: add {TrySendError,SendTimeoutError}::into_inner (#6755)
task: add JoinSet::join_all (#6784)

Added (unstable)

runtime: add Builder::{on_task_spawn, on_task_terminate} (#6742)

Changed

io: use vectored io for write_all_buf when possible (#6724)
runtime: prevent niche-optimization to avoid triggering miri (#6744)
sync: mark mpsc types as UnwindSafe (#6783)
sync,time: make Sleep and BatchSemaphore instrumentation explicit roots (#6727)
task: use NonZeroU64 for task::Id (#6733)
task: include panic message when printing JoinError (#6753)
task: add #[must_use] to JoinHandle::abort_handle (#6762)
time: eliminate timer wheel allocations (#6779)

Documented

docs: clarify that [build] section doesn't go in Cargo.toml (#6728)
io: clarify zero remaining capacity case (#6790)
macros: improve documentation for select! (#6774)
sync: document mpsc channel allocation behavior (#6773)

#6589: tokio-rs/tokio#6589
#6724: tokio-rs/tokio#6724
#6727: tokio-rs/tokio#6727
#6728: tokio-rs/tokio#6728
#6731: tokio-rs/tokio#6731
#6733: tokio-rs/tokio#6733
#6742: tokio-rs/tokio#6742
#6744: tokio-rs/tokio#6744
#6753: tokio-rs/tokio#6753
#6755: tokio-rs/tokio#6755
#6762: tokio-rs/tokio#6762
#6773: tokio-rs/tokio#6773
#6774: tokio-rs/tokio#6774
#6779: tokio-rs/tokio#6779
#6783: tokio-rs/tokio#6783
#6784: tokio-rs/tokio#6784
#6790: tokio-rs/tokio#6790



Commits

ea6d652 chore: prepare Tokio v1.40.0 (#6806)
11f66f4 chore: replace ready! with std::task::ready! (#6804)
479a56a time: eliminate timer wheel allocations (#6779)
b37f0de runtime: implement initial set of task hooks (#6742)
c9fad08 codec: fix typo in the docs for Encoder::Error (#6800)
cc70a21 task: add join_all method to JoinSet (#6784)
1ac8dff task: add AbortOnDropHandle type (#6786)
ff3f2a8 io: add SimplexStream (#6589)
5b9a290 io: clarify zero remaining capacity case (#6790)
70569bd task: fix typo in TaskTracker docs (#6792)
Additional commits viewable in compare view




Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

@dependabot rebase will rebase this PR
@dependabot recreate will recreate this PR, overwriting any edits that have been made to it
@dependabot merge will merge this PR after your CI passes on it
@dependabot squash and merge will squash and merge this PR after your CI passes on it
@dependabot cancel merge will cancel a previously requested merge and block automerging
@dependabot reopen will reopen this PR if it is closed
@dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
@dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
@dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
@dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
@Kranzes
Copy link

Kranzes commented Aug 30, 2024

Hi thanks for this PR, could you also make one for try_join_all?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-tokio Area: The main tokio crate M-task Module: tokio/task

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement join_all and try_join_all on JoinSet

4 participants