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