91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

在Go語言中如何處理并發任務取消問題

小云
107
2023-10-09 08:21:49
欄目: 編程語言

在Go語言中處理并發任務取消問題,可以使用context包來管理和取消任務。

首先,使用context包創建一個上下文對象,例如:

ctx, cancel := context.WithCancel(context.Background())
defer cancel()

然后,在并發的任務中通過select語句來監聽取消信號,例如:

select {
case <-ctx.Done():
// 任務被取消,執行清理操作
return
default:
// 執行任務操作
// ...
}

如果要取消任務,可以調用cancel函數,例如:

cancel()

當調用cancel函數時,所有使用同一個context對象的協程都會收到取消信號,從而停止執行任務。

完整的示例代碼如下:

package main
import (
"context"
"fmt"
"time"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
go worker(ctx, "worker1")
go worker(ctx, "worker2")
time.Sleep(3 * time.Second)
cancel()
time.Sleep(1 * time.Second)
}
func worker(ctx context.Context, name string) {
for {
select {
case <-ctx.Done():
fmt.Printf("%s: 任務被取消\n", name)
return
default:
fmt.Printf("%s: 執行任務\n", name)
time.Sleep(1 * time.Second)
}
}
}

運行上述代碼,會輸出如下結果:

worker1: 執行任務
worker2: 執行任務
worker1: 執行任務
worker2: 執行任務
worker1: 任務被取消
worker2: 任務被取消

0
敖汉旗| 崇文区| 九江县| 榆社县| 六盘水市| 棋牌| 通州区| 宜兰市| 嵩明县| 合川市| 宣城市| 乃东县| 太仆寺旗| 大石桥市| 武安市| 扶绥县| 邢台县| 白朗县| 辉南县| 盐边县| 宜兰县| 常州市| 邵阳县| 孟村| 秦皇岛市| 顺昌县| 民权县| 马尔康县| 日土县| 阳曲县| 酉阳| 洪洞县| 海原县| 米泉市| 渝中区| 新津县| 宁波市| 铁岭市| 丁青县| 神农架林区| 屏东市|