如果不能确保的话,那么主线程会提前退出,部分数据就会被抛弃了?
如果不能确保的话,那么主线程会提前退出,部分数据就会被抛弃了?
1
SimonDing May 10, 2019 via Android
range 来耗尽 channel?
|
2
a719114136 May 10, 2019 via Android
处理 channel 之前用 waitGroup 记一下,退出时等待 waitgroup 变为 0
|
3
dreampuf May 10, 2019
由 producer 关闭
|
4
liulaomo May 10, 2019
@SimonDing 说的对。
或者如下手动,其实和 for v := range c { use(v) } 是等价的。 for { v, closed := <-c; if closed ( break } // use v ... } |
5
cabing May 10, 2019
这个加个方法 waitGroup 监听下吧。
在主线程上加个 w.Add(1) 在这里可以手动关闭吧。 close(xxx) wg.wait(); 做一个开关 chan go func(chan a interface{}){ for xxxx{ do something... } wg.done(); } |
6
janxin May 11, 2019
代码组织设计时考虑,由生产者关闭
|