首页 > 文章列表 > golang如何通过取消context,终止函数执行?

golang如何通过取消context,终止函数执行?

golang
124 2023-06-27

问题内容

golang如何通过取消context,终止函数执行?

正确答案

可以像这样:

package main

import (
	"context"
	"fmt"
	"time"
)

func main() {
	// 创建父级 context
	parentCtx := context.Background()

	// 创建可取消的子级 context
	childCtx, cancel := context.WithCancel(parentCtx)

	// 启动并发的函数或操作,接收 context 参数
	go func(ctx context.Context) {
		// 模拟耗时操作
		for {
			select {
			case <-ctx.Done():
				// 收到取消信号
				fmt.Println("收到取消信号,停止执行")
				return
			default:
				// 继续正常执行
				fmt.Println("执行中...")
				time.Sleep(time.Second)
			}
		}
	}(childCtx)

	// 在需要终止函数执行的地方,调用 cancel() 函数
	time.Sleep(3 * time.Second)
	cancel()

	// 等待一段时间以观察执行的效果
	time.Sleep(2 * time.Second)
	fmt.Println("程序结束")
}