Mọi người đều sử dụng nhiều Danh sách. Tôi cần phải lặp qua danh sách này, vì vậy tôi sử dụng mẫu SyncRoot đã biết.Danh sách <T> không triển khai SyncRoot!
Gần đây, tôi nhận thấy trong bài đăng this rằng SyncRoot nên tránh để ủng hộ "an toàn luồng" được nhúng (mỗi phương pháp sẽ khóa trên một đối tượng riêng tư mà không lộ nó bằng thuộc tính SyncRoot). Tôi có thể hiểu nó, và một phần tôi đồng ý về điều đó.
Câu hỏi đặt ra là List<T> lớp không triển khai thuộc tính SyncRoot, ngay cả khi triển khai giao diện ICollection, hiển thị thuộc tính SyncRoot. Tôi nói điều này BAUSE mã
List<int> list = new List<int>()
list.SyncRoot;
cung cấp cho tôi những lỗi biên dịch sau:
error CS0117: 'System.Collections.Generic.List' does not contain a definition for 'SyncRoot'
... Nếu điều này là đúng, làm thế nào tôi có thể đồng bộ hóa một tài sản công cộng của loại List <T> khi iterating qua nó?
Tôi chưa bao giờ tìm thấy SyncRoot hoạt động tốt trong cuộc sống thực, vì khóa có xu hướng hoạt động tốt hơn ở mức cao hơn, thay vì chỉ khóa các bộ sưu tập duy nhất –