如何清空BlockingCollection
我有一个线程添加到BlockingCollection
项目。
在另一个线程上我使用foreach (var item in myCollection.GetConsumingEnumerable())
如果有问题,我想打破我的foreach和我的方法并清除BlockingCollection
中剩下的任何东西但是我找不到办法去做。
有任何想法吗?
可能使用GetConsumingEnumerable
的重载,它接受CancellationToken
,然后如果生产方出现任何问题,它可以取消消费者。
我正在使用这种扩展方法:
public static void Clear(this BlockingCollection blockingCollection) { if (blockingCollection == null) { throw new ArgumentNullException("blockingCollection"); } while (blockingCollection.Count > 0) { T item; blockingCollection.TryTake(out item); } }
我想知道是否有一个更好,更少hacky的解决方案。
这对我有用
while (bCollection.Count > 0) { var obj = bCollection.Take(); obj.Dispose(); }
Take()
从集合中删除,您可以调用对象的任何清理,并且循环条件不会调用任何阻塞调用。
只需取出所有剩余物品:
while (collection.TryTake(out _)){}
BlockingCollection yourBlockingCollection = new BlockingCollection ();
我以为你的意思是清除阻挡系列。 Jon的回答更适合我认为的实际问题。
只需清除集合即可:
myBlockingCollection.TakeWhile<*MyObject*>(qItem => qItem != null);
要不就
上述就是C#学习教程:如何清空BlockingCollection分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
myBlockingCollection.TakeWhile<*MyObject*>(qItem => true);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1013396.html