为了账号安全,请及时绑定邮箱和手机立即绑定

在GoLang中取消上下文时如何在函数中立即返回?

在GoLang中取消上下文时如何在函数中立即返回?

Go
宝慕林4294392 2022-10-17 16:47:34
package mainimport (    "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    }}输出:doingstill doingcancel我不知道当它获得的上下文是取消时如何使这个 doSth 函数返回。换句话说,我希望这个函数的输出是:输出:doingcancel
查看完整描述

1 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

您可以使用计时器,它将在给定的持续时间后通过通道发送消息。这允许您将其添加到选择中。


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")

    }

}


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号