在Go语言中如何处理并发任务取消问题

62次阅读
没有评论

共计 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 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-13发表,共计813字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)