登录
首页 >  Golang >  Go问答

中止长查询的方法在应用程序停止时应用

来源:stackoverflow

时间:2024-02-14 10:51:17 295浏览 收藏

大家好,我们又见面了啊~本文《中止长查询的方法在应用程序停止时应用》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我的应用程序有一个数据库查询,可能需要很长时间才能完成。它在单独的 goroutine 中运行。

func main() {
    ///...
    go func() {
        ctx, cancelfunc := context.withtimeout(context.background(), 3*time.minute)
        defer cancelfunc()

        rows, err := db.querycontext(ctx, "very long query")
        if err != nil {
            fmt.println("failed to execute query:", err)
            return
        }
        ///...
    }()

    ///...

}

当应用程序停止时如何中断它? 我尝试像这样解决它,但读到在另一个 goroutine 中导致上下文停止是不好的做法

func main() {
    ///...
    stop := make(chan struct{})
    go func(chan struct{}) {
        ctx, cancelFunc := context.WithTimeout(context.Background(), 3*time.Minute)
        defer cancelFunc()

        go func() {
            <-stop
            fmt.Println("Received interrupt signal, canceling request...")
            cancelFunc()
        }()
        rows, err := db.QueryContext(ctx, "very long query")
        if err != nil {
            fmt.Println("Failed to execute query:", err)
            return
        }
        ///...
    }(stop)

    ///...

    stop <- struct{}{}
}

正确答案


您只需将全局上下文(在 main 中创建)传递给您的函数,并向数据库发出请求,当您取消此全局上下文时,您的请求也将被取消

今天关于《中止长查询的方法在应用程序停止时应用》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>