package main
import (
"context"
"fmt"
"time"
)
func main() {
ctx := context.Background()
c, fn := context.WithCancel(ctx)
go doSth(c)
time.Sleep(1 * time.Second)
fn()
time.Sleep(10 * time.Second)
}
func doSth(ctx context.Context) {
fmt.Println("doing")
time.Sleep(2 * time.Second)
fmt.Println("still doing")
select {
case <-ctx.Done():
fmt.Println("cancel")
return
}
}
輸出:
doing
still doing
cancel
當它獲得的背景關系取消時,我不知道如何使這個 doSth 函式回傳。
換句話說,我希望這個函式的輸出是:
輸出:
doing
cancel
uj5u.com熱心網友回復:
您可以使用計時器,它會在給定的持續時間后通過頻道發送訊息。這允許您將其添加到選擇中。
func main() {
ctx := context.Background()
c, fn := context.WithCancel(ctx)
go doSth(c)
time.Sleep(1 * time.Second)
fn()
time.Sleep(10 * time.Second)
}
func doSth(ctx context.Context) {
fmt.Println("doing")
timer := time.NewTimer(2 * time.Second)
select {
case <-timer.C:
fmt.Println("still doing")
case <-ctx.Done():
fmt.Println("cancel")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/373108.html
標籤:走
上一篇:如何制作切片結構的物件?
