Я столкнулся с проблемой при написании асинхронного многосерверного сетевого приложения на c #.У меня есть много заданий, выполняемых пулом потоков, в том числе записи в сетевые сокеты.Это позволило учесть случай, когда более чем один поток мог одновременно писать в сокет и сбивать мои исходящие сообщения.Моя идея обойти это состояла в том, чтобы реализовать систему очередей, в которой всякий раз, когда данные добавлялись в очередь, сокет записывал их.
Моя проблема в том, что я не могу полностью обернуться вокруг архитектуры чего-либоэтой природы.Я представляю себе объект очереди, который запускает событие всякий раз, когда данные добавляются в очередь.Затем событие записывает данные, хранящиеся в очереди, но это не сработает, потому что, если два потока приходят и добавляют в очередь одновременно, даже если очередь создана для обеспечения безопасности потока, события все равно будут запускаться для обоих иЯ столкнусь с той же проблемой.Так что, может быть, каким-то образом отложить событие, если другое происходит, но как мне продолжить это событие, когда первое завершится, без простой блокировки потока на каком-нибудь мьютексе или чем-то еще.Это не было бы так сложно, если бы я не пытался оставаться строгим с моей архитектурой «ничего не блокировать», но это конкретное приложение требует, чтобы я позволял потокам пула потоков продолжать делать свое дело.
Есть идеи?