golang context cancel
时间: 2023-09-30 22:08:56 浏览: 159
Go Context与任务取消
在Go语言中,可以使用`context`包来创建和管理上下文。通过`context.WithCancel`函数,我们可以创建一个带有取消功能的上下文。
下面是一个示例代码,展示如何使用`context`来取消一个任务:
```go
package main
import (
"context"
"fmt"
"time"
)
func doTask(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Task canceled!")
return
default:
// 模拟任务的工作
fmt.Println("Working...")
time.Sleep(1 * time.Second)
}
}
}
func main() {
// 创建一个可取消的上下文
ctx, cancel := context.WithCancel(context.Background())
// 启动任务
go doTask(ctx)
// 5秒后取消任务
time.Sleep(5 * time.Second)
cancel()
// 等待任务退出
time.Sleep(1 * time.Second)
fmt.Println("Main goroutine exits.")
}
```
在这个例子中,我们使用`context.WithCancel`函数创建了一个可取消的上下文,并通过调用返回的`cancel`函数来取消任务。在任务中,我们使用`ctx.Done()`来检查是否有取消信号,如果有就退出任务。
请注意,这只是一个简单的示例,实际使用时可能会有更复杂的逻辑和错误处理。
阅读全文