Statyczna lista połączeń z usługą a jej obsługa przez wielu klientów. Jak to bezpiecznie zrobić?

0

Witam wszystkich serdecznie!
Utworzyłem usługę TCP IP. Przy wywołaniu przez klienta metody Register() usługa pobiera OperationContext.Current i zapisuje go w statycznej liście zlokalizowanej wewnątrz klasy usługi.
Listę utworzyłem po to, by informować pozostałych klientów poprzez połączenie zwrotne o istotnych wydarzeniach np. zalogowanie się użytkownika.

Jednak wszędzie, gdzie czytam o statycznych listach w c# autorzy artykułów odradzają to i ja również czuję się zaniepokojony, co się stanie jak na przykład będę iterował po liście wysyłając wiadomości do każdego klienta, a jeden z tych klientów będzie chciał zakończyć pracę z usługą i potrzeba będzie usunąć element z listy. Nigdzie nie mogę znaleźć rozwiązania tego problemu więc zgłaszam się do Was o pomoc. Jak to zrobić "bezpiecznie"?

Jeżeli ten link jest dobrą ścieżką do zwycięstwa proszę o potwierdzenie
https://docs.microsoft.com/pl-pl/dotnet/standard/collections/thread-safe/blockingcollection-overview

0

Potwierdzam, kolekcja jest bezpieczna. Nie będzie ona już obniżać bezpieczeństwa. Ewentualnie operacje Add,Remove mogą blokować wątki jeżeli ustawisz z góry rozmiar kolekcji. W przypadku gdy kolekcja będzie pusta (Remove) lub pełna (Add)

0

@teo215: czyli mój staticlist jest całkowicie bezpieczny?
https://pastebin.com/KccN4bvr
Czy podczas wysyłania wiadomości do wszystkich klientów powinienem iterować po ClientConnections.Connections czy lepiej nie zawracać głowy głównej liście, zrobić sobie ClientConnections.Connections.ToArray() i wtedy iterować po tablicy i wysyłać wiadomości?

1 użytkowników online, w tym zalogowanych: 0, gości: 1