このクラスは、オブジェクトを格納する順序が問題とならないときに適しています。また、重複に対応します。Remarks - ConcurrentBag<T> Class (System.Collections.Concurrent) | Microsoft Learn
ConcurrentBag<int> cb = new ConcurrentBag<int>(); cb.Add(1); cb.Add(2); cb.Add(3); // cbには 3, 2, 1 の順で格納される int result; bool ret1 = cb.TryTake(out result); // resultには 3が格納される bool ret2 = cb.TryPeek(out result); // resultには 2が格納される bool ret3 = cb.TryPeek(out result); // resultには 2が格納される
複数のスレッドから追加や削除をした場合、順番はこの通りとは限りません。c# - What is the difference between ConcurrentBag and ConcurrentStack? - Stack Overflow
メソッド | 機能 |
---|---|
Add(T) | オブジェクトを、追加する |
TryTake(T) | オブジェクトを、削除して取得を試みる |
TryPeek(T) | オブジェクトを、削除せずに取得を試みる |
public void Add (T item);ConcurrentBag<T>.Add(T) メソッド (System.Collections.Concurrent) | Microsoft Learn
オブジェクトを削除して返すように指示できます。
public bool TryTake (out T result);ConcurrentBag<T>.TryTake(T) メソッド (System.Collections.Concurrent) | Microsoft Learn
削除されたオブジェクトがresultに格納されます。バッグが空ならば、Tの既定値が格納されます。
削除できたならばtrueが返されます。