Мне нужно прочитать с NetworkStream
, что будет отправлять данные случайным образом, и размер пакетов данных также будет меняться.Я реализую многопоточное приложение, где каждый поток будет иметь свой собственный поток для чтения.Если в потоке нет данных, приложение должно продолжать ждать поступления данных.Однако, если сервер завершил отправку данных и завершил сеанс, он должен завершиться.
Изначально я использовал метод Read
для получения данных из потока, но он использовал для блокировкипоток и продолжал ждать, пока данные не появились в потоке.
В документации по MSDN предлагается:
Если данные для чтения недоступны, метод Read возвращает 0. Если удаленный хост завершает соединение, и все доступные данные былиПолученный метод Read завершается немедленно и возвращает ноль байтов.
Но в моем случае у меня никогда не было метода Read
, который возвращал бы 0 и изящно завершал работу.Это просто ждет бесконечно.
В моем дальнейшем исследовании я столкнулся с BeginRead
, который наблюдает за потоком и асинхронно вызывает метод обратного вызова, как только он получает данные.Я также пытался найти различные реализации с использованием этого подхода, но я не смог определить, когда использование BeginRead
будет выгодно, а не Read
.
На мой взгляд, BeginRead
имеет только то преимущество, что имеет асинхронный вызов, который не блокирует текущий поток.Но в моем приложении у меня уже есть отдельный поток для чтения и обработки данных из потока, так что для меня это не будет иметь большого значения.