Я не уверен, как использование асинхронного приема поможет с обработкой.Насколько я понимаю, у вас будет один поток, который подключается к сокету и читает непрерывный поток данных.Я предполагаю, что поток может разбить этот непрерывный поток на записи какого-либо типа или, по крайней мере, на блоки управляемого размера.Затем вам нужно сделать эти данные доступными для одного или нескольких потоков обработки.
Я настоятельно рекомендую вам использовать параллельную очередь (фактически BlockingCollection
) для связи между потоком, который читает данные, ипоток или потоки, которые будут выполнять обработку.Есть несколько причин, по которым я предлагаю использовать BlockingCollection
:
- Это просто в использовании - нет явного кода блокировки
- Это делает незанятые ожидания
- Он обрабатываетN читателей и N писателей эффективно
Ваше довольно типичное приложение для производителей и потребителей.Производитель (поток, читающий сокет) получает данные, помещает их в очередь, и затем один или несколько потребителей (потоков обработки) могут читать и обрабатывать данные.Я не могу придумать более простой, более эффективный или более эффективный способ сделать это в .NET, чем с BlockingCollection
.