在 BlockingCollection 中搜索特定元素

Search for a particular element in BlockingCollection

我有一个BlockingCollection:

private readonly BlockingCollection<ImageKeys> myCompletedImages;

我有一个方法可以将项目添加到 BlockingCollection:

public void addItem(ImageKey theImagekey)
{
    if (this.myCompletedImages.Contains(theImagekey)) // Here it says
                                                      // I do not have "Contains"
    {         
        return;
    }
    this.myCompletedImages.Add(theImagekey);
}

如何知道 BlockingCollection 中是否存在特定元素?由于 Contains 不存在..还有其他方法吗?

搜索 BlockingCollection<T> 以查看它是否包含特定元素,是此 class 的预期用途所不需要的功能,旨在促进生产者-消费者场景。所以这个 class 没有公开 Contains 方法作为其 public API 的一部分。您 可以 利用 class 实现 IEnumerable<T> 接口这一事实,并使用 ConcurrentBag<T> [=31] 中的 LINQ Contains operator, however keep in mind this cautionary note =].据我所知,它通常适用于所有并发集合:

All public and protected members of ConcurrentBag<T> are thread-safe and may be used concurrently from multiple threads. However, members accessed through one of the interfaces the ConcurrentBag<T> implements, including extension methods, are not guaranteed to be thread safe, and may need to be synchronized by the caller.

(强调)

因此只有在“战斗”结束并且 BlockingCollection<T> 实例上的所有并发操作都结束后,您才能安全地使用 LINQ Contains 扩展方法。这可能不是你想要的。在这种情况下,BlockingCollection<T> 可能不是解决您要解决的任何问题的正确工具。