实现思路
- 创建一个带有超时的
context.Context
,设置超时时间为2秒。
- 将这个
context.Context
传递给heavyTask
函数。
- 在
heavyTask
函数内部,使用ctx.Done()
通道来检查是否收到取消信号,如果收到则停止任务并返回错误。
核心代码示例
package main
import (
"context"
"fmt"
"time"
)
func heavyTask(ctx context.Context) (result string, err error) {
// 模拟一个耗时任务
select {
case <-ctx.Done():
return "", ctx.Err()
case <-time.After(3 * time.Second):
return "Task completed", nil
}
}
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
result, err := heavyTask(ctx)
if err != nil {
fmt.Println("Task cancelled:", err)
return
}
fmt.Println("Result:", result)
}