Для проекта, над которым мы работали, мы использовали параллельный словарь, который был прекрасен до появления новой спецификации, которая требовала сортировки словаря (она должна оставаться в том порядке, в котором она была добавлена, вроде как FIFO) ,Есть ли сопутствующий сортированный словарь или что-то подобное?
В настоящее время это то, что мы делаем, мы берем й количество (5 в данном случае) элементы из словаря:
private Dictionary<PriorityOfMessage, ConcurrentDictionary<Guid, PriorityMessage>> mQueuedMessages = new Dictionary<PriorityOfMessage, ConcurrentDictionary<Guid, PriorityMessage>>();
var messages = new List<KeyValuePair<Guid, PriorityMessage>>();
messages.AddRange(mQueuedMessages[priority].Take(5));
тогда мы делаем некоторые вещи с ним, и в конце концов, если все удастся, мы удалили их.
Однако, если что-то не удается, мы не удалим их и не попробуем позже. К сожалению, нет совпадающего сортированного словаря, но есть ли способы обеспечить сохранение сообщений в том порядке, в котором они добавлены?
Очень важно, что мы можем взять несколько объектов из списка/словаря, не удаляя их (или нам нужно будет добавить их на передний план позже).
насчет '' ConcurrentQueue? –
Rahul
Может быть, просто использовать замок? Какие требования к параллелизму у вас есть? Трудно переоценить блокировку, если критическая область мала. – usr
@Rahul Мне нужно видеть больше, чем просто первое, в очереди вы можете видеть только первый объект в очереди, не удаляя его, если вы удаляете что-то, что вы не можете вернуть. – Vincent