【发布时间】:2017-12-09 12:56:52
【问题描述】:
我有一个定义任务的结构体,每个任务都在一个 goroutine 中运行,我希望所有 goroutines 在第一个通过信号 task.signalComplete 完成任务时停止。
目前我有以下。
for _, task := range taskList {
go func(task *myTask, firstCompleteSignal chan<- bool) {
for {
select {
// When the task completes, it emit signalComplete
case <-task.signalComplete:
firstCompleteSignal<-true
return
}
}
}(task, firstCompleteSignal)
}
for {
select {
case <-firstCompleteSignal:
// manually stop all go thread
return
}
}
这是规范的吗?
或者有没有像 sync.WaitGroup 这样的库来为我做这件事来等待所有的 goroutine 完成?
【问题讨论】:
-
您可能想要搜索术语“goroutine”,因为这是您感兴趣的(以及您可以在哪里找到示例)而不是线程。
-
@Volker 感谢您的建议,我确实做了一些研究,但我发现的大多数示例都要求等待所有 goroutine 完成,而不是等到第一个完成。我编辑我的措辞以在术语中更准确
-
@user3591466:你怎么能有一片goroutine?您是否正在寻找取消,例如
Context? -
@JimB 你是对的,goroutine 的切片令人困惑,我实际上有一个任务切片,每个任务都在一个 goroutine 中运行。我正在寻找能够在第一个任务完成后关闭所有任务的库
标签: multithreading go channel goroutine