既然dc里的值是顺序执行的,为什么不可以用for vid:=range(dc)来取呢?
来源:5-5 task示例的实现
sd1700092
2018-06-27
老师前几节课说不能用range取channel的里的值,不是很同意呀。。
感觉用range也是可以的,因为业务逻辑好像就是顺序放,再顺序取的。(这点runner_test.go里面已经表现出来了)
而且用range也就不用加forloop标签跳出for循环了,整体看上去更简洁些。
写回答
1回答
-
for range是同步调用,阻塞的。
而select是非阻塞,异步的轮询,因此在很多场景下range出来的channel内消息会出现跟预期结果不一致的情况。比如在用timer做定时器的时候,就会出现延迟,并且延迟还会叠加。
select是非常安全也高效的做法,所以我们推荐用select而不是用range
112018-06-28
相似问题