donegroup.WithCancelとwaitの関連がわかりやすい。cancelとwaitでわかりやすい
ctx, cencel wait := donegroup.WithCancel(ctx) だけをみるととても良い
donegroup.Wait(ctx) というよりも donegroup.WaitWithCancel(ctx, timeout) や donegroup.WaitWithContext(ctx, ctxx) のため。
「クリーンアップの処理のタイムアウトの実現」や「シグナルによるWaitの解除」がユースケース
donegroup.WithCancelWithCancel(ctx, timeout) も考えられるが、メソッド名が大変なことになりそう( WithCancelCauseAndKeyWithContext とか意味がわからない)
donegroup.WithCancel(ctx context.Context, opts...donegroup.Option) とかにすれば良さそうに見える。
一方で、「タイムアウトの設定」はWait関数の設定と言えるので、果たしてdonegroup.WithCancel側に持つべきかをまだ判断できていない。