powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ConncurrentBag - может ли терять объекты
5 сообщений из 5, страница 1 из 1
ConncurrentBag - может ли терять объекты
    #38307295
FsShoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
использую ConcurrentBag для хранения записей с полями
id, TaskId

объекты записываются разными потоками.
потом

потом на некотором этапе. когда объекты с TaskId например 10 уже точно не добавляются.

делаю следующее


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
var lst = _bag.Where(e => e.TaskId == 10).ToList();
foreach (var record in lst)
{
    Process(record);
    Record r;
    if (!_bag.TryTake(out r))
        Warning("Ошибка удаления из коллекции");
}        



цикл проходит, все удаляет.
только в _bag остаются элементы с TaskId = 10 (хотя еще до вызова
Код: c#
1.
var lst = _bag.Where(e => e.TaskId == 10).ToList();


записи с таким TaskId уже не добавлялись.
...
Рейтинг: 0 / 0
ConncurrentBag - может ли терять объекты
    #38307296
FsShoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну и +

иногда после удаления объекты живут еще некоторое время и при ToList выдаются.

я конечно все понимаю что потокобезопасная коллекция, но когда объекты появляются и удаляются через произвольный промежуток времени. то как писать бизнес-логику?
...
Рейтинг: 0 / 0
ConncurrentBag - может ли терять объекты
    #38307632
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FsShoman,

В потокобезопасных коллекциях не стоит рассчитывать на ToList, т.к. они выдадут вам состоянии на некоторый момент времени. В зависимости от того, как сложится работа потоков, там может быть всё что угодно.

Поэтому надо как-то упорядочить работу с потоками. B вашем случае больше подойдёт ConcurrentDictionary.
...
Рейтинг: 0 / 0
ConncurrentBag - может ли терять объекты
    #38307689
FsShoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtorFsShoman,

В потокобезопасных коллекциях не стоит рассчитывать на ToList, т.к. они выдадут вам состоянии на некоторый момент времени. В зависимости от того, как сложится работа потоков, там может быть всё что угодно.

Поэтому надо как-то упорядочить работу с потоками. B вашем случае больше подойдёт ConcurrentDictionary.

ConcurrentDictionary - да уже попробовал. подошел :)
...
Рейтинг: 0 / 0
ConncurrentBag - может ли терять объекты
    #38307690
FsShoman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

Спасибо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / ConncurrentBag - может ли терять объекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]