在 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>
可能不是解决您要解决的任何问题的正确工具。
我有一个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 theConcurrentBag<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>
可能不是解决您要解决的任何问题的正确工具。