Il n'est pas déraisonnable de demander. Il y sont des cas où les méthodes qui peuvent causer des thread-les questions de sécurité en combinaison avec d'autres méthodes sont sans danger si elles sont la seule méthode appelée.
Cependant, ce n'est pas un cas, quand vous considérez le code indiqué dans le réflecteur:
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
Même si EnsureCapacity
était en elle-même thread-safe (et ce n'est surtout pas), le code ci-dessus est clairement ne va pas être thread-safe, compte tenu de la possibilité d'appels simultanés à l'opérateur d'incrémentation causant mal écrit.
Soit de verrouillage, utilisez ConcurrentList, ou peut-être utiliser un verrou sans file d'attente comme le lieu de plusieurs threads écrire et le lire à partir d' - soit directement ou par le remplissage d'une liste, avec elle, après qu'ils ont fait leur travail (je suis en supposant que les multiples et simultanées écrit suivi par un seul thread de lecture est à votre patron ici, à en juger d'après votre question, parce que sinon, je ne vois pas comment l'état où Add
est la seule méthode appelée pourrait être d'une quelconque utilité).