终止第二个goroutine

终止第二个goroutine,第1张

终止第二个goroutine

组织这种行为的标准方法是使用

package mainimport (    "fmt"    "time"    "pre.google.com/p/go.net/context")func errName(ctx context.Context, cancel context.CancelFunc) {    for i := 0; i < 10000; i++ {        select {        case <-ctx.Done(): return        default:        }    }    cancel()}func errEmail(ctx context.Context, cancel context.CancelFunc) {    for i := 0; i < 100; i++ {        select {        case <-ctx.Done(): return        default:        }    }    cancel()}func main() {    ctx := context.Background()    ctx, cancel := context.WithCancel(ctx)    go errName(ctx, cancel)    go errEmail(ctx, cancel)    <-ctx.Done()    if ctx.Err() != nil {        fmt.Println(ctx.Err())    }    time.Sleep(1000000)}

您可以阅读有关此问题的两篇好文章:

  1. http://blog.golang.org/context
  2. http://blog.golang.org/pipelines


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存