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

avatar
作者
筋斗云
阅读量:0

在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: 任务被取消 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!