Csharp/C#教程:如何清空BlockingCollection分享


如何清空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

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐