несколько, которые прорабатывают эти сообщения.
Каждый из потоков, которые обрабатывают, работают с конкретными сообщениями. То есть, как только поток, который принимает, получает какое-то сообщение, мне нужно, чтобы поток, который ждал этого сообщения начал работать.
Сейчас есть решения, которое мне не нравится.
Что я делаю:
Поток, который принимает сообщения закидывает их в общий контейнер, а в потоках, которые прорабатывают просто жду пока в этом контейнере появятся сообщения.
while (!receivedMessages.Contains("message1");
// do something
Но это тратит CPU циклы. Какие лучшие решения?
Ивенты/семафоры
это понятно, как мне их использовать?)
Каналы
а, да?
спасибо, посмотрю
взять какую-нибудь in-memory message queue и не морочиться
https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.readerwriterlockslim?view=net-5.0 еще вот такое есть
Мне кажется, тебе нужна асинхронная шина сообщений (с подписками на топики) или акторы. Писать такое руками я бы не стал. Поищи библиотеку.
Обсуждают сегодня