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