Разница между NetworkStream.Read () и NetworkStream.BeginRead ()?

Мне нужно прочитать из NetworkStream , который будет отправлять данные случайным образом, и размер пакетов данных также продолжает меняться. Я реализую многопоточное приложение, в котором каждый поток будет иметь свой собственный поток для чтения. Если в потоке нет данных, приложение должно продолжать ждать прибытия данных. Однако, если сервер завершил отправку данных и завершил сеанс, он должен выйти.

Первоначально я использовал метод Read для получения данных из потока, но он использовался для блокировки поток и продолжал ждать, пока данные не появятся в потоке.

В документации MSDN предлагается:

Если данные недоступны для чтения, Я реализую многопоточное приложение, в котором каждый поток будет иметь свой собственный поток для чтения. Если в потоке нет данных, приложение должно ждать прибытия данных. Однако, если сервер завершил отправку данных и завершил сеанс, он должен выйти.

Первоначально я использовал метод Read для получения данных из потока, но он использовался для блокировки поток и продолжал ждать, пока данные не появятся в потоке.

В документации MSDN предлагается:

Если данные недоступны для чтения, Я реализую многопоточное приложение, в котором каждый поток будет иметь свой собственный поток для чтения. Если в потоке нет данных, приложение должно ждать прибытия данных. Однако, если сервер завершил отправку данных и завершил сеанс, он должен выйти.

Первоначально я использовал метод Read для получения данных из потока, но он использовался для блокировки поток и продолжал ждать, пока данные не появятся в потоке.

В документации MSDN предлагается:

Если данные недоступны для чтения,

Первоначально я использовал метод Read для получения данных из потока, но он использовался для блокировки потока и продолжал ждать, пока данные не появятся в потоке.

В документации MSDN предлагается:

Если данные недоступны для чтения,

Изначально я использовал метод Read для получения данных из потока, но он использовался для блокировки потока и продолжал ждать, пока данные не появятся в потоке.

В документации MSDN предлагается:

Если данные недоступны для чтения, метод Read возвращает 0. Если удаленный хост отключает соединение, и все доступные данные были получен, метод Read завершает немедленно и вернуть нулевые байты.

Но в моем случае у меня никогда не было метода Read для возврата 0 и корректного выхода. Он просто ждет бесконечно.

В ходе дальнейшего исследования я наткнулся на BeginRead , который наблюдает за потоком и асинхронно вызывает метод обратного вызова, как только получает данные. Я попытался найти различные реализации, использующие этот подход, однако мне не удалось определить, когда использование BeginRead будет выгодным по сравнению с Read .

Насколько я понимаю, BeginRead имеет то преимущество, что имеет асинхронный вызов, который не блокирует текущий поток. Но в моем приложении у меня уже есть отдельный поток для чтения и обработки данных из потока, так что не будет Для меня это не имеет большого значения.

  • Кто-нибудь, пожалуйста, помогите мне понять механизм ожидания и выхода для BeginRead и чем он отличается от Read ?

  • Как лучше всего реализовать желаемую функциональность?

8
задан Rodia 8 April 2017 в 06:00
поделиться