Ce n'est pas une chose déraisonnable à demander. Il existe des cas où les méthodes qui peuvent causer des problèmes de sécurité des threads en combinaison avec d'autres méthodes sont sûres si elles sont la seule méthode appelée.
Cependant, ce n'est clairement pas un cas, si l'on considère le code affiché 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 s'il EnsureCapacityétait en lui-même threadsafe (et ce n'est certainement pas le cas), le code ci-dessus ne sera clairement pas threadsafe, compte tenu de la possibilité d'appels simultanés à l'opérateur d'incrémentation provoquant des erreurs d'écriture.
Soit verrouiller, utiliser ConcurrentList, ou peut-être utiliser une file d'attente sans verrou comme lieu d'écriture de plusieurs threads, et la lecture de celle-ci - soit directement, soit en remplissant une liste avec elle - après avoir fait leur travail (je suppose que plusieurs écritures simultanées suivies d'une lecture à un seul thread est votre modèle ici, à en juger par votre question, sinon je ne peux pas voir comment la condition où Addest la seule méthode appelée pourrait être utile).