首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清空BlockingCollection

如何清空BlockingCollection
EN

Stack Overflow用户
提问于 2011-11-04 04:04:55
回答 6查看 23K关注 0票数 22

我有一个向BlockingCollection添加项目的线程。

在另一个线程上,我使用的是foreach (var item in myCollection.GetConsumingEnumerable())

如果有问题,我想打破我的foreach和我的方法,并清除BlockingCollection中剩下的任何东西,但是我找不到一种方法。

有什么想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-11-04 04:08:48

可以使用接受CancellationTokenGetConsumingEnumerable重载;然后,如果生产端出现任何错误,它可以取消消费者。

票数 9
EN

Stack Overflow用户

发布于 2012-07-10 18:30:16

我正在使用这个扩展方法:

代码语言:javascript
复制
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);
    }
}

我想知道是否有更好的,不那么老生常谈的解决方案。

票数 18
EN

Stack Overflow用户

发布于 2018-04-03 23:01:41

把剩下的东西都拿出来:

代码语言:javascript
复制
while (collection.TryTake(out _)){}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8001133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档