美文网首页
超时控制代码写法

超时控制代码写法

作者: 快感炮神 | 来源:发表于2020-09-18 16:47 被阅读0次

    假设有一个耗时业务如下,将其改造成超时关闭

    // demo 假设耗时业务
    func demo() string {
        time.Sleep(time.Second * 3)
        return "success"
    }
    

    改造方法如下

    // demo
    // 将结果改由channel,并且立刻返回
    // 真正的业务处理放到协程里
    func demo() chan string {
        result := make(chan string)
        // 处理原有逻辑,避免阻塞
        go func() {
            time.Sleep(time.Second * 3)
            result <- "success"
        }()
        return result
    }
    
    func run() (interface{}, error) {
        c := demo()
        select {
        case res := <-c:
            return res, nil
        case <-time.After(time.Second * 2): // 超时处理
            return nil, fmt.Errorf("timeout")
        }
    }
    
    func main() {
        fmt.Println(run())
    }
    

    相关文章

      网友评论

          本文标题:超时控制代码写法

          本文链接:https://www.haomeiwen.com/subject/wwpjyktx.html