我认为这更像是一个关于逻辑的问题,而不是自己.我想找到一种基于go语言依赖性执行任务的方法.

考虑上面的工作流程:任务1,2,3和4可以同时异步运行.当任务1和2完成时,将执行任务10.当任务3和4结束时将执行任务11当任务11和12结束时将执行任务12当任务10和11结束时将执行任务100.
我正在使用go渠道来进行并发执行,并希望找到一种有效的方法来控制依赖项.我知道我可以有一些标志和一个表来控制执行,但理想情况下我想在内存中这样做以避免数据库调用来控制这样的事情.我也明白有几种方法可以做到这一点,但我想听听你的想法,因为我确信有一种更好的方式,而不是迄今为止我想出的方法.
关于该主题有一个有趣的reddit主题,以回应文章" 如何等待所有Goroutines在继续之前完成执行 ".
正确的文章是" 如何等待所有Goroutines在继续之前完成执行,第二部分:修复我的糟糕 "并说明了在继续执行另一项任务之前等待goroutines的几种方法.
根据您要同步的任务的信息类型,sync.WaitGroup是一个很好的候选者(如本例所示).
但:
当您知道预期的消息数量时,您可能还需要知道何时完成消息.在这里,WaitGroup是多余的,令人困惑.
这将阻止直到收到所有3条消息:
func main() {
messages := make(chan int)
go func() {
time.Sleep(time.Second * 3)
messages <- 1
}()
go func() {
time.Sleep(time.Second * 2)
messages <- 2
}()
go func() {
time.Sleep(time.Second * 1)
messages <- 3
}()
for i := 0; i < 3; i++ {
fmt.Println(<-messages)
}
}
Run Code Online (Sandbox Code Playgroud)
所以这真的取决于你从等待的任务中得到什么.