Golang Context 探究
{ p.children = make(map[canceler]struct{}) } // 与父 context 关联 p.children[child] = struct{}{} } p.mu.Unlock() } else { // 如果没有找到可取消的父 context,新启动一个协程监控父节点或子节点取消信号 atomic.AddInt32(&goroutines, +1) go func() { select { case <-parent.Done(): child.cancel(false, parent.Err()) case <-child.Done(): } }() } context.propagateCancel 的作用是把子 context 和父 context 关联起来,保证在...阅读全文