我有一个向BlockingCollection添加项目的线程。
在另一个线程上,我使用的是foreach (var item in myCollection.GetConsumingEnumerable())
如果有问题,我想打破我的foreach和我的方法,并清除BlockingCollection中剩下的任何东西,但是我找不到一种方法。
有什么想法吗?
发布于 2011-11-04 04:08:48
可以使用接受CancellationToken的GetConsumingEnumerable重载;然后,如果生产端出现任何错误,它可以取消消费者。
发布于 2012-07-10 18:30:16
我正在使用这个扩展方法:
public static void Clear<T>(this BlockingCollection<T> blockingCollection)
{
if (blockingCollection == null)
{
throw new ArgumentNullException("blockingCollection");
}
while (blockingCollection.Count > 0)
{
T item;
blockingCollection.TryTake(out item);
}
}我想知道是否有更好的,不那么老生常谈的解决方案。
发布于 2018-04-03 23:01:41
把剩下的东西都拿出来:
while (collection.TryTake(out _)){}https://stackoverflow.com/questions/8001133
复制相似问题