Các tài liệu MSDN của System.Collections.Concurrent.ConcurrentDictionary nói:Thành viên của .NET ConcurrentDictionary nào an toàn chỉ?
Chủ đề An toàn
Tất cả các thành viên cộng đồng và bảo vệ của
ConcurrentDictionary<TKey, TValue>
là thread-safe và có thể được sử dụng đồng thời từ nhiều chủ đề. Tuy nhiên, thành viên được truy cập thông qua một trong các giao diệnConcurrentDictionary<TKey, TValue>
thực hiện, bao gồm các phương pháp mở rộng, không được bảo đảm là an toàn chủ đề và có thể cần được đồng bộ hóa bởi người gọi.
(tôi nhấn mạnh)
Điều này có vẻ tự mâu thuẫn. "Tất cả các thành viên đều an toàn. Tuy nhiên, các thành viên [đôi khi] không an toàn."
Tôi hiểu rằng phương pháp mở rộng tất nhiên không được bảo đảm là chuỗi an toàn.
Nhưng ý nghĩa của chúng là "được truy cập thông qua một trong các giao diện"? Có phải TryGetValue
(một thành viên của giao diện IDictionary<TKey, TValue>
) có an toàn không?
Bất kỳ ý tưởng nào tại sao lại như vậy? – Peter
@Peter - tốt, cho một, có ít giá trị trong * cung cấp * bảo lãnh như vậy vì nếu bạn đang truy cập thông qua giao diện như vậy, có khả năng mã gọi có thể sử dụng bảo lãnh (vì các triển khai khác sẽ không cung cấp bảo lãnh như vậy). –