登录
首页 >  Golang >  Go问答

管理和终止 Go 例程的技巧

来源:stackoverflow

时间:2024-03-20 08:09:30 405浏览 收藏

在 Go 中管理和终止例程至关重要。本指南提供了技巧,帮助您有效地启动、停止和管理例程。使用 `context.Done()` 机制可以根据特定参数优雅地终止例程,避免不必要的资源消耗。此外,本文还探讨了处理错误和上下文超时的最佳实践,以确保您的例程健壮且可控。通过遵循这些技巧,您可以提高 Go 应用程序的可靠性和可维护性。

问题内容

这是实际情况的抽象示例,我必须通过调用 func b 来停止 func a 创建的某些特定 go 例程

func a(context, interval, ...params) {
 go (interval) {
    tk := time.ticker(interval)
    for {
      select {
       case <- tk.c:
        err := func c(params)
     }
    }
  }(interval)
}

(func a) 使用特定参数以重复间隔创建 go 例程执行 (func c)。

func B(context, ...params) {
  // stop go routine that runs func C with specific params.
}

(func b) 需要停止具有给定参数的 go 例程运行 (func c)。 另外我如何处理(func a)中的错误和上下文超时等情况。

注意:提供了伪代码,抱歉无法共享真实代码。


正确答案


我相信您正在寻找 context.Done

select {
case <-ctx.Done():
    // context was cancelled, stop goroutine
    return
case <-tk.C:
    C(params...)
}

工作示例:https://go.dev/play/p/wSUHSHCse7D

没有简单的方法可以根据参数查找 goroutine,因此您必须稍微调整代码以选择要取消的上下文。

今天关于《管理和终止 Go 例程的技巧》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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