Non è una cosa irragionevole da chiedere. Ci sono casi in cui i metodi che possono causare problemi di thread safety in combinazione con altri metodi sono sicuri se sono l'unico metodo chiamato.
Tuttavia, questo chiaramente non è un caso, se si considera il codice mostrato in reflector:
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
Anche se EnsureCapacityfosse di per sé threadsafe (e certamente non lo è), il codice sopra chiaramente non lo sarà, considerando la possibilità che chiamate simultanee all'operatore di incremento causino errori di scrittura.
Blocca, usa ConcurrentList, o forse usa una coda priva di blocchi come luogo in cui scrivono più thread e leggi da esso - direttamente o riempiendo un elenco - dopo che hanno svolto il loro lavoro (presumo che più scritture simultanee seguite da lettura a thread singolo è il tuo modello qui, a giudicare dalla tua domanda, altrimenti non riesco a vedere come la condizione in cui si Addtrova l'unico metodo chiamato potrebbe essere di qualche utilità).