Безопасно ли оборачивать NetworkStream с BufferedStream для асинхронного чтения? - PullRequest
8 голосов
/ 17 марта 2012

Я использую NetworkStream.BeginRead для асинхронного чтения из Socket.

Но это намного быстрее, если вы на самом деле оберните сетевой поток BufferedStream.

Myвопрос: NetworkStream.BeginRead внутренне вызывает Socket.BeginReceive и весь стек асинхронного ввода-вывода (CompletionPorts в Windows и т. д.).Происходит ли то же самое, когда BufferedStream находится посередине?

1 Ответ

2 голосов
/ 19 марта 2012

BufferedStream не поддерживает эффективный асинхронный ввод-вывод. Он использует реализацию по умолчанию, унаследованную от класса Stream. Он выдаст синхронные операции ввода-вывода в пуле потоков. Таким образом, вы не получите порты завершения ввода-вывода, делающие это. Вы должны сделать эту работу самостоятельно. Если вы используете C # 5, вы можете почти повторно использовать реализацию BufferedStream и попытаться выполнить асинхронную обработку и ожидать ее.

...