Tôi đang ở trong tình huống này có một từ điển lớn được cập nhật ngẫu nhiên bởi một luồng ở tần số khá cao, và có một luồng khác cố gắng chụp nhanh từ điển để lưu làm lịch sử. Tôi hiện đang sử dụng một cái gì đó như thế này:Trong C#, làm thế nào để lặp lại IEnumerable trong môi trường đa luồng
Dictionary<string, object> dict = new Dictionary<string, object>();
var items = dict.Values.ToList();
này hoạt động tốt đối với hầu hết các trường hợp, ngoại trừ nó thỉnh thoảng ném:
System.InvalidOperationException: Bộ sưu tập đã được sửa đổi; liệt kê hoạt động có thể không thực thi.
Tôi hiểu tại sao điều này xảy ra, nhưng tôi không biết tôi có thể làm gì để tránh lỗi sửa đổi bộ sưu tập.
Cách tiếp cận tốt nhất để lặp lại bộ sưu tập đó là gì?
Tôi cũng đã thử ConcurrentDictionary nhưng không may mắn. Tại sao? Chủ đề ConcurrentDictionary chỉ an toàn ở cấp mục?
Bạn nên sử dụng 'khóa'. – Rob
Trong trường hợp của tôi, nhiều giải pháp được đề xuất ở đây cũng sẽ hoạt động, nhưng giải pháp được chấp nhận phù hợp nhất với tôi. Xin lỗi vì trả lời muộn. –