Я использую NetworkStream & TcpClient для асинхронного приема данных с помощью BeginRead. Мне нужно применить тайм-аут к этой операции, так что через определенное время считывание будет прервано.BeginReceive/BeginRead таймауты
Насколько я могу сказать, это не поддерживается в NetworkStream или TcpClient - есть свойство ReceiveTimeout, но это, похоже, применимо только к синхронному эквиваленту - «Чтение».
Даже основной класс Socket, похоже, не поддерживает таймауты в методе BeginReceive.
Я искал эту проблему, и единственная предлагаемая резолюция, которую я видел, - это создать еще один фоновый поток, чтобы отменить операцию, если она не завершена в течение периода ожидания. Это кажется ужасным взломом. Наверняка есть лучший способ?
Joel указывает нам в правильном направлении вокруг не используя фоновый поток, чтобы отменить, но упаковывают это не очевидно, что многие из людей, это есть 1 поток (возможно, из рабочего опроса) периодически очищает мертвые соединения. Это необходимо для освобождения дескрипторов сокетов/и т. Д., И особенно важно, если вы когда-либо получаете что-либо вроде атаки отказа в обслуживании - намеренно или нет. – eselk
Другой вариант - ['System.Threading.Timer'] (http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx), который не принимает поток. – hangar