Golang 協程控制關閉


部分代碼參考:https://zhuanlan.zhihu.com/p/26695984  

這邊文章的的


package main

import (
"context"
"fmt"
"time"
)

func main() {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
go Proc(ctx, 1)
go Proc(ctx, 2)
go Proc(ctx, 3)
go Proc(ctx, 4)

time.Sleep(time.Second / 10)
cancel()

time.Sleep(time.Second)
}

func Proc(ctx context.Context, n int) {
for {
select {
case <-ctx.Done():
return
default:
fmt.Printf("Proc-%d ", n)
}
}
}


這種形式的協程關閉和  自己寫的區別在於   自己寫的話自己要記錄下協程的數量,關閉的chan等等

這種比較省事兒,不過用法還是有點局限性的,比如協程里面沒有 for{select } 這種結構的時候就比較尷尬了。

不過這種方法用在  遞歸調用的時候  相當好用的   就是  go func(    go func1(  go func2()))   這種一個協程調用另一個協程一直這樣的時候發現有問題了,就可以一個cancel()全部退出。
————————————————
版權聲明:本文為CSDN博主「____Luke」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/soekchl521/article/details/72420535


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM