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