На сколько безопасно в данном случае использовать List?

class ThreadSafePair<T1, T2> {

    object item1Lock = new object(), item2Lock = new object();

    T1 item1;
    T2 item2;

    public T1 Item1 {
        get { lock (item1Lock) return item1; }
        set { lock (item1Lock) item1 = value; }
    }

    public T2 Item2 {
        get { lock (item2Lock) return item2; }
        set { lock (item2Lock) item2 = value; }
    }

    public ThreadSafePair(T1 item1, T2 item2) {
        this.item1 = item1;
        this.item2 = item2;
    }
}

ConcurrentDictionary<long, ThreadSafePair<List<Update>, AutoResetEvent>> Collection =
    new ConcurrentDictionary<long, ThreadSafePair<List<Update>, AutoResetEvent>>();

Добавляет элементы в Collection и в List<Update> 1 поток. С каждым ключом соответственно здесь работает по 1 потоку - они читают и в дальнейшем очищают свой List<Update>, в каком то случае могут даже вовсе удалить элемент из ConcurrentDictionary. Возможно нужно заменить List на ConcurrentBag? Есть тут необходимость во ThreadSafePair?


Ответы (0 шт):