in ctxtool/func.go [60:70]
func (ctx *funcContext) wait(cancel <-chan struct{}, done chan struct{}, fn func()) {
defer close(done)
defer fn()
select {
case <-ctx.Context.Done():
ctx.setErr(ctx.Context.Err())
case <-cancel:
ctx.setErr(context.Canceled)
}
}