Skip to content

Instantly share code, notes, and snippets.

@k1LoW
Last active June 8, 2024 07:08
Show Gist options
  • Save k1LoW/9c6c09aaaba08d0f1415ecae298ad036 to your computer and use it in GitHub Desktop.
Save k1LoW/9c6c09aaaba08d0f1415ecae298ad036 to your computer and use it in GitHub Desktop.

ctx, cencel wait := donegroup.WithCancel(ctx) ではない理由

前提: ctx, cencel wait := donegroup.WithCancel(ctx) が良い理由

  • donegroup.WithCancelwait の関連がわかりやすい。
  • cancelwait でわかりやすい

ctx, cencel wait := donegroup.WithCancel(ctx) だけをみるととても良い

なぜ wait ではなく donegroup.Wait(ctx) に分かれているのか

donegroup.Wait(ctx) というよりも donegroup.WaitWithCancel(ctx, timeout)donegroup.WaitWithContext(ctx, ctxx) のため。

「クリーンアップの処理のタイムアウトの実現」や「シグナルによるWaitの解除」がユースケース

タイムアウトやシグナルによる解除の設定を donegroup.WithCancel側に持てばいいのではないか?

donegroup.WithCancelWithCancel(ctx, timeout) も考えられるが、メソッド名が大変なことになりそう( WithCancelCauseAndKeyWithContext とか意味がわからない)

donegroup.WithCancel(ctx context.Context, opts...donegroup.Option) とかにすれば良さそうに見える。

一方で、「タイムアウトの設定」はWait関数の設定と言えるので、果たしてdonegroup.WithCancel側に持つべきかをまだ判断できていない。

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