Потокобезопасная кольцевая коллекция

129
18 октября 2019, 05:50

Нужна коллекция, которая потокобезопасно и по порядку сможет отдавать свои элементы при запросе без их удаления, при достижении конца коллекции, начать отдачу сначала. При этом всём, должна быть возможность добавления новых элементов прямо во время работы с этой коллекцией. Я сразу обратил внимание на интерфейс 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. И вообще у меня ощущения что я сделал кривой велосипед, есть ли другие пути решения данной задачи или мой пример это норма и такое можно использовать?

READ ALSO
Передача данных в TextBox при парсинге AngleSharp

Передача данных в TextBox при парсинге AngleSharp

Использую для парсинга библиотеку AngleSharpПосле парсинга не могу вывести данные в TextBox

144
newtonsoft.json сохраняет в одну строчку

newtonsoft.json сохраняет в одну строчку

Чтобы записать в json-файл данные использую newtonsoftjson

149
Изменение Background у элементов ListView в зависимости от значения. WPF

Изменение Background у элементов ListView в зависимости от значения. WPF

У меня есть ListView отображающий список файловПри добавлении в ListView предметов, background у добавленного элемента должен быть красным, так как изначально...

166
C#: Использование асинхронных методов

C#: Использование асинхронных методов

Обычно я использую следующий асинхронный код:

143