Нужна коллекция, которая потокобезопасно и по порядку сможет отдавать свои элементы при запросе без их удаления, при достижении конца коллекции, начать отдачу сначала. При этом всём, должна быть возможность добавления новых элементов прямо во время работы с этой коллекцией. Я сразу обратил внимание на интерфейс IEnumerator. Для потокобезопасности, я выбрал concurrentbag, т.к в документации написано, что работа с enumerator там реализована потокобезопасно. Вопрос в том, что не получается сделать конечный удобный интерфейс для работы с такой коллекцией.
public class InfoBag : ConcurrentBag<string>
{
public IEnumerator<string> Enumerator { get; private set; }
public InfoBag()
{
Enumerator = GetEnumerator();
}
public void AddRange(IEnumerable<string> items)
{
foreach (var item in items)
{
base.Add(item);
}
Enumerator = GetEnumerator();
}
public new void Add(string item)
{
base.Add(item);
Enumerator = GetEnumerator();
}
public string Take()
{
if (!Enumerator.MoveNext())
{
Enumerator = GetEnumerator();
Enumerator.MoveNext();
}
return Enumerator.Current;
}
}
В этом примере много неудобств, например если нету элементов, коллекция всегда будет возвращать null. И вообще у меня ощущения что я сделал кривой велосипед, есть ли другие пути решения данной задачи или мой пример это норма и такое можно использовать?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Использую для парсинга библиотеку AngleSharpПосле парсинга не могу вывести данные в TextBox
Чтобы записать в json-файл данные использую newtonsoftjson
У меня есть ListView отображающий список файловПри добавлении в ListView предметов, background у добавленного элемента должен быть красным, так как изначально...