共計 813 個字符,預計需要花費 3 分鐘才能閱讀完成。
在 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: 任務被取消
丸趣 TV 網 – 提供最優質的資源集合!
正文完