gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:44 24 4
gpt4 key购买 nike

我正在构建一个数据工具,用于收集流中的数据并对其进行操作。我有一个主例程,一个“进程管理器”,负责创建累积函数的新例程。经理被告知根据 channel 接收选择案例创建例程,该例程在无限循环中运行(我已经为自己和它创建的所有例程准备了取消例程)。问题是管理器需要能够在其主要范围内运行 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
}
}
}

这是我的用例的一个非常非常简单的示例,但我希望它能说明我的问题的组成部分。让我知道这是否可能、可行、合理、不可取;不,这不是我实现拆解的方式哈哈

最佳答案

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

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

关于select - 如何在选择的父级范围内运行的选择案例中调用 goroutine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21132051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com