ibeautiful
2022-08-09 16:17:21
我有一個(gè)接收上下文并執(zhí)行一些cpu綁定操作(如波紋管)的func。func DoSomeOperation(ctx context.Context){
CPUBoundWork1()
CPUBoundWork2()
CPUBoundWork3()
CPUBoundWork4()
}我想做的是在進(jìn)行每個(gè)CPUBound調(diào)用之前檢查是否已取消。如果取消,我想立即返回,而無(wú)需制作下一個(gè)功能。有什么辦法可以做到這一點(diǎn)嗎?Contextfunccall
1 回答

溫溫醬
TA貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用 ctx。錯(cuò)誤()
if ctx.Err() == context.Canceled {
return
}
您也可以將 select 語(yǔ)句與 的一起使用。slicefunctions
例如:
ctx := ...
executors := []func(){...}
Loop:
for _,executor := range executors{
select {
case <-ctx.Done():
if ctx.Err() == context.Canceled {
break Loop
}
if ctx.Err() == context.DeadlineExceeded {
//do something else
}
default:
executor()
}
}
- 1 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報(bào)
0/150
提交
取消