Bukan hal yang tidak masuk akal untuk bertanya. Ada yang kasus di mana metode yang dapat menyebabkan masalah benang-keselamatan dalam kombinasi dengan metode lain yang aman jika mereka adalah satu-satunya metode yang disebut.
Namun, ini jelas bukan masalahnya, ketika Anda mempertimbangkan kode yang ditampilkan di reflektor:
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
Bahkan jika EnsureCapacityitu sendiri threadsafe (dan tentu saja tidak), kode di atas jelas tidak akan menjadi threadsafe, mengingat kemungkinan panggilan simultan ke operator tambahan menyebabkan kesalahan penulisan.
Kunci, gunakan ConcurrentList, atau mungkin gunakan antrean bebas kunci sebagai tempat menulis beberapa utas, dan baca darinya - baik secara langsung atau dengan mengisi daftar dengannya - setelah mereka menyelesaikan pekerjaan mereka (saya berasumsi bahwa beberapa penulisan simultan diikuti dengan pembacaan utas tunggal adalah pola Anda di sini, dilihat dari pertanyaan Anda, karena jika tidak, saya tidak dapat melihat bagaimana kondisi di mana Addsatu-satunya metode yang dipanggil dapat digunakan).