Jon*_*Jon 15 .net c# .net-4.0 task-parallel-library c#-4.0
我有一个线程添加项目到BlockingCollection.
在我正在使用的另一个线程上 
foreach (var item in myCollection.GetConsumingEnumerable())
如果有问题我想要摆脱我的foreach和我的方法并清除剩下的东西,BlockingCollection但是我找不到办法去做.
有任何想法吗?
Pao*_*tti 17
我正在使用这种扩展方法:
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);
    }
}
我想知道是否有一个更好,更少hacky的解决方案.
myt*_*thz 11
只需取出所有剩余物品:
while (collection.TryTake(out _)){}
可能使用过载GetConsumingEnumerable需要a CancellationToken,然后如果生产方出现任何问题,它可以取消消费者.
这对我有用
while (bCollection.Count > 0)
{
    var obj = bCollection.Take();
    obj.Dispose();
}
Take() 从集合中删除,您可以调用对象的任何清理,并且循环条件不会调用任何阻塞调用.
| 归档时间: | 
 | 
| 查看次数: | 18360 次 | 
| 最近记录: |