170 похожих чатов

Ребят, всем привет. У меня есть: ConcurrentDictionary<WebSocketClient, WebSocket> _sockets = new ConcurrentDictionary<WebSocketClient,

WebSocket>();
Нужно получить список значений WebSocket по условию.
Какой метод правильнее и почему? Или оба фигня?

11 ответов

6 просмотров
Jan- Автор вопроса
Jan
screenshot

Смотря для чего. Зачем нужен parallel?

Jan- Автор вопроса
ioannis
Смотря для чего. Зачем нужен parallel?

Чтобы потом всем WebSocket, которые вернул метод, отправить сообщение. На кодревью сказали, что из ConcurrentDictionary извлекать значения чем-то помимо TryGetValue не стоит, но в моем случае TryGetValue не вариант. Насчет обычного foreach вместо Parallel.ForEach не знаю, прочитал, что лучше использовать второй вариант. Он вроде потокобезопасный, а первый вариант просто копию создает. Не уверен.

Jan
Чтобы потом всем WebSocket, которые вернул метод, ...

Ну перечисление по конкурентному словарю порождает новый список, который не меняется. Потому про второй метод даже не знаю, что не понравилось. А первый - ну он очень не очень. Складывать надо тоже через try*, в конкурентную коллекцию, да и непонятно, зачем параллельность в фильтрации, если ее не просят

Jan
Ок, спасибо

Про try*- это правильно. Потому что ты не можешь быть уверен, что объект там есть, даже если сам его только что положил туда, потому все методы через try, что бы не получать тяжёлых исключений, и перехватывать их, а проверять и поступать в зависимости от задачи.

Jan
screenshot

Оба варианта выглядят так, будто там race condition.

Jan- Автор вопроса
Dr. Friedrich von Never
Оба варианта выглядят так, будто там race conditio...

Меня, кажется, осенило. Раньше было: ConcurrentDictionary<WebSocketClient, WebSocket> _sockets Сделаю так: ConcurrentDictionary<WebSocketClient, ConcurrentDictionary<ConnectionType, ConcurrentDictionary<string, WebSocket>>> _sockets (где string - уникальный ид соединения) Тогда в метод можно будет передать: WebSocketClient wsClient (состоит из ProjectId и StreamId) и ConnectionType connectionType И вытащить список нужных вебсокетов через _sockets.TryGetValue(wsClient, out var connectionsByType); connectionsByType.TryGetValue(connectionType, out var connections); Всем спасибо за помощь=)

Dr. Friedrich von Never
screenshot

дальше будет как у тебя на аватарке?

Похожие вопросы

Обсуждают сегодня

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Карта сайта