Nó không phải là một điều vô lý để hỏi. Có những trường hợp các phương pháp có thể gây ra các vấn đề an toàn luồng kết hợp với các phương pháp khác là an toàn nếu chúng là phương pháp duy nhất được gọi.
Tuy nhiên, đây rõ ràng không phải là trường hợp của nó, khi bạn xem xét mã được hiển thị trong phản xạ:
public void Add(T item)
{
if (this._size == this._items.Length)
{
this.EnsureCapacity(this._size + 1);
}
this._items[this._size++] = item;
this._version++;
}
Ngay cả khi EnsureCapacitybản thân nó đã là threadsafe (và chắc chắn là không), đoạn mã trên rõ ràng sẽ không phải là threadsafe, khi xem xét khả năng các cuộc gọi đồng thời đến toán tử gia tăng gây ra ghi sai.
Khóa, sử dụng ConcurrentList hoặc có thể sử dụng hàng đợi không có khóa làm nơi nhiều luồng ghi vào và đọc từ đó - trực tiếp hoặc bằng cách điền vào danh sách - sau khi họ đã hoàn thành công việc của mình (tôi giả sử rằng nhiều lần ghi đồng thời theo sau là đọc một luồng là mẫu của bạn ở đây, dựa trên câu hỏi của bạn, vì nếu không, tôi không thể thấy điều kiện như thế nào mà Addphương pháp duy nhất được gọi có thể sử dụng).