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

   2025-02-20 4180
核心提示:在Go语言中处理并发任务取消问题,可以使用context包来管理和取消任务。首先,使用context包创建一个上下文对象,例如:ctx, can

在Go语言中处理并发任务取消问题,可以使用context包来管理和取消任务。

首先,使用context包创建一个上下文对象,例如:

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

然后,在并发的任务中通过select语句来监听取消信号,例如:

select {case <-ctx.Done():// 任务被取消,执行清理操作returndefault:// 执行任务操作// ...}

如果要取消任务,可以调用cancel函数,例如:

cancel()

当调用cancel函数时,所有使用同一个context对象的协程都会收到取消信号,从而停止执行任务。

完整的示例代码如下:

package mainimport ("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)returndefault:fmt.Printf("%s: 执行任务\n", name)time.Sleep(1 * time.Second)}}}

运行上述代码,会输出如下结果:

worker1: 执行任务worker2: 执行任务worker1: 执行任务worker2: 执行任务worker1: 任务被取消worker2: 任务被取消

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言