本人新手新手码农一名~ 想请教一下
4.0并发框架里面有个blockingCollection的并发集合
书上说是主要用来解决生产者消费者模式的场景
有个小疑问,如果我使用并发的For循环或者使用Task.Factory.StartNew方法多线程对并发集合进行添加
并在循环的后面使用blockingCollection的CompleteAdding方法通知消费者
这样会不会出现有的元素未添加到集合里面,并发集合就已经拒绝添加元素了?
因为我感觉parllel.for或者在串行的for循环里面新建任务都是在主线程以外新建或者窃取线程完成的,主线程并不知道子线程结果
只是在新建这些线程之后就执行completeAdding方法。
这样的设计是不是不是很好呢? 应该怎么做比较好呢?求教各路大神~轻喷轻喷~
------解决思路----------------------
BlockingCollection不是可以设置容量吗,另外CompleteAdding使用后,就不允许加入任何元素了,不管容量是否达到
------解决思路----------------------
的确不是很好。因为创建线程并切换CPU去执行需要时间的,有可能主线程调用了completeAdding后,还没有任何子线程(parllel.for和Task)来得及执行,这样会导致那样创建好的线程在添加元素时被阻塞