我有一個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);
}
如何知道特定元素是否存在于 a 中BlockingCollection?由于Contains不存在..還有其他方法可以做到嗎?
uj5u.com熱心網友回復:
搜索 aBlockingCollection<T>以查看它是否包含特定元素,是此類的預期用途不需要的功能,這是為了促進生產者-消費者場景。因此,此類不會將Contains方法作為其公共 API 的一部分公開。你可以利用一個事實,即類實作了IEnumerable<T>介面,并使用LINQContains運營商,但牢記這種謹慎注意從ConcurrentBag<T>類。AFAIK 它一般適用于所有并發集合:
的所有公共成員和受保護成員
ConcurrentBag<T>都是執行緒安全的,并且可以從多個執行緒同時使用。但是,通過ConcurrentBag<T>實作的介面之一訪問的成員,包括擴展方法,不能保證執行緒安全,并且可能需要由呼叫者同步。
(強調)
因此,Contains只有在“戰斗”結束,并且BlockingCollection<T>實體上的所有并發操作都結束后,您才能安全地使用 LINQ擴展方法。這可能不是你想要的。在這種情況下,BlockingCollection<T>對于您要解決的任何問題,它可能都不是正確的工具。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327004.html
