2 回答

TA貢獻1824條經驗 獲得超6個贊
您必須在 goroutine 中檢查上下文過期/取消:
go func(ctx context.Context) {
fmt.Println("LOTS OF WORK TIME..")
for i := 0; i < 1000; i++ {
select {
case <-ctx.Done():
return
default:
}
time.Sleep(1 * time.Second) // LOTS OF WORK
fmt.Println(i)
}
}(ctx)

TA貢獻1820條經驗 獲得超3個贊
就像 Burak Serdar 所說,你必須檢查 goroutine 中上下文的狀態,但不僅僅是在 goroutine 開始時:你必須在 goroutine 中定期檢查。
go func(ctx context.Context) {
for i := 0; i < 1000; i++ {
select {
case <-ctx.Done():
return
default:
// do some work
}
}
}(ctx)
一般來說,不應該從外部殺死一個 goroutine;它必須自己檢查并意識到時間到了。
- 2 回答
- 0 關注
- 127 瀏覽
添加回答
舉報