golang 任务超时控制

it2026-02-09  0

package main import ( "context" "fmt" "time" ) func main() { ret := TaskWithTimeout(DoSomething, time.Second*3) fmt.Println("ret:", ret) time.Sleep(time.Second * 4) // 等待,若无则看不到最后一行打印 } func TaskWithTimeout(task func(), duration time.Duration) bool { ctx, cancel := context.WithTimeout(context.Background(), duration) defer cancel() done := make(chan struct{}, 1) go func() { task() done <- struct{}{} }() select { case <-done: fmt.Println("done") return false case <-ctx.Done(): fmt.Println("main", ctx.Err()) return true } } func DoSomething() { fmt.Println("[in] DoSomething") time.Sleep(time.Second * 4) fmt.Println("[out] DoSomething") } [in] DoSomething main context deadline exceeded ret: true [out] DoSomething
最新回复(0)