Explore a higher-level task group primitive
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 30/100
- issue の種類
- 機能追加
- 明瞭さ
- 説明が足りない
- 活発さ
- 活発
- 技術スタック
- rust
調査の方向性
まず Asyncband の具体的なユースケースを特定し、次にここで調査した JoinSet、TaskTracker、errgroup、StructuredTaskScope、TaskGroup、coroutineScope のモデルと比較します。8つの列挙された質問への回答と、その契約から導出した名前を伴って、意味論上のファミリと契約を選択すること、または新しいプリミティブの必要性を退けることが完了の条件です。
索引モデルが issue の本文から書いたものです。
説明
Context
WaitGroup is a low-level lifetime barrier: cloned RAII handles represent outstanding work, and waiters observe when all handles are gone. It deliberately does not own tasks, collect results, propagate errors, or define cancellation and parent-child relationships.
Some use cases need a higher-level abstraction for a group of related asynchronous tasks. That should be designed as a separate primitive rather than changing WaitGroup. ForkJoin was an initial placeholder, not a proposed public name.
Ecosystem survey
- Rust's
tokio::task::JoinSet<T>owns runtime-spawned tasks, yields homogeneous results in completion order, and aborts remaining tasks when dropped. It is primarily controlled by one mutable collection owner. - Rust's
tokio_util::task::TaskTrackeris cloneable and supports registration without mutable access. Waiting requires the tracker to be both closed and empty; completed tasks release their storage immediately, results are not retained, and dropping the tracker does not abort tasks. - Go's
errgroup.Groupgroups goroutines belonging to one operation, waits for them, returns the first non-nil error, can cancel a derived context on failure, and optionally limits concurrency. - Java's
StructuredTaskScopemakes one owner responsible for a lexical task scope. It forks subtasks, joins them under an explicit policy, prevents new forks after joining, and closes by cancelling and waiting for unfinished subtasks. - Swift's
TaskGroupis a non-escaping structured scope for dynamically created child tasks. Children inherit parent context, results form an asynchronous sequence, and the scope cannot return while children remain. - Kotlin's
coroutineScopeestablishes a parent-child task tree: the parent waits for children, while failure and cancellation propagate through the scope.
These examples separate into at least three families: result-owning task collections (JoinSet), shareable lifecycle trackers (TaskTracker), and structured lexical scopes (StructuredTaskScope, Swift TaskGroup, Kotlin coroutineScope). Go's errgroup combines lifecycle tracking with failure policy.
Questions to answer
- Is the target a runtime-agnostic future tracker, or may it spawn and therefore depend on a runtime?
- Is registration shareable with child tasks, restricted to one owner, or lexically scoped so handles cannot escape?
- Does joining only signal quiescence, return one result at a time, collect all results, or reduce them through a policy?
- How are task errors and panics represented, and should the first failure cancel siblings?
- What does dropping the owner do: detach, cancel, abort, or synchronously/asynchronously wait?
- Is there an explicit
closetransition that prevents new top-level work? Can running children register nested work after close? - Is bounded concurrency part of this primitive or an orthogonal concern?
- Does the design require one join owner, or are multiple completion observers meaningful?
Naming
The name should follow the selected contract rather than lead it:
TaskGroupsuggests structured child ownership and possibly result collection.JoinSetsuggests an owned collection with per-task results.TaskTrackersuggests shared lifecycle observation without task ownership.TaskScopesuggests lexical structure and non-escaping children.
No name or API is proposed yet. The next step is to identify concrete Asyncband use cases and choose which semantic family, if any, belongs in a runtime-agnostic synchronization crate.
- 主要言語
- Rust
- スター
- 274
- フォーク
- 42
- 平均マージ
- 20時間 18分
- マージ済み PR(30日)
- 55
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/asyncband のほかの issue
-
enhancement good first issue help wanted
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
apache/asyncband#324 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
enhancement question
難易度 5/5 1週間以上 初心者へのやさしさ 30/100
apache/asyncband#312 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
enhancement help wanted
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
メンテナーはふだん 1 日以内に返信
-
Explore ManualResetEvent waiter storage and state fast paths再び着手できるかも このイシューのプルリクエストはマージされずにクローズされました。 オープンenhancement good first issue help wanted
難易度 5/5 1週間以上 初心者へのやさしさ 38/100
apache/asyncband#252 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 5/5 1週間以上 初心者へのやさしさ 20/100
apache/asyncband#224 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
apache/asyncband の issue をすべて見る
似ている issue
-
arch-audit refactor
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
SocketDev/socket-patch#1011 ·
メンテナーはふだん 1 日以内に返信
-
L: github:actions L: php:composer
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
dependabot/dependabot-core#16493 ·
メンテナーはふだん 1 日以内に返信
-
agent-ready area:breg bug criticality:p3 triage:needs-implementation
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
registrystack/registry-stack#1941 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
joshstevens19/rindexer#483 ·
メンテナーはふだん 1 日以内に返信
-
VX_PRINT_DROPS prints each drop point twice on the default code generator, the second time at line 0オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信