首页 > 解决方案 > 并发模式:具有可变数量结果的工作人员

问题描述

我想在 golang 中创建一个工作池,将一个大任务划分为多个工作。

问题是例程可能会产生多个输出作为计算的结果,所以我无法提前知道我将在结果通道上迭代多少次。

我知道我可以使用 WaitGroup,但我想知道是否可以使用另一种模式,以便让主线程在计算上前进并迭代结果,而不是先等待每个例程完成。

我认为对我来说不是很优雅的另一个解决方案是创建一个Result结构或返回一个结果数组。因为我可以数出作品的数量,所以我知道我会收到多少个结果数组。

标签: godesign-patternsconcurrency

解决方案


你可以这样做:

go func() {
    wg.Wait()
    close(results)
}()

for res := range results {
    // Handle results
}

当所有工作人员完成处理后,关闭结果通道。读取结果的过程将完成,然后退出循环。


推荐阅读