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

如何在选择的父级范围内运行的选择案例中调用 goroutine

如何在选择的父级范围内运行的选择案例中调用 goroutine

Go
隔江千里 2021-07-13 13:10:20
我正在构建一个数据工具,用于收集流中的数据并对其进行操作。我有一个主程序,一个“进程管理器”,它负责创建一个累积函数的新程序。经理被告知基于通道接收选择案例创建例程,它在无限循环中运行(我已经有我自己的取消例程和它创建的所有例程)。问题是管理器需要能够在其主要范围内运行 goroutine 累加器,以便它们可以在 select 和 for 循环的范围之外运行(我希望它们在管理器接受新案例时继续运行)。cancel := make(chan struct{})chanchannel := make(chan chan datatype)func operationManager (chanchannel chan chan datatype, cancel chan struct{}) {for { select {  case newchan := <- chanchannel:    go runAccum(newchan, cancel)  case <- cancel:    return }}}func runAccum(inchan chan datatype, cancel chan struct{}) {for { select {  case data := <- inchan;    //do something  case <- cancel:    return }}}这是我的用例的一个非常非常简单的示例,但我希望它说明了我的问题的组成部分。让我知道这是否可能、可行、合理、不可取;不,这不是我实施拆解的方式哈哈
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

goroutine 没有“范围”。所有 goroutine 都是平等的。闭包有“范围”,但你的 goroutine 不跨越闭包。因此,您跨越的所有 goroutinego runAccum(newchan, cancel)将与您跨越的任何其他 goroutine 一样,无论来自何处。

我假设您没有测试您的解决方案?


查看完整回答
反对 回复 2021-07-19
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信