BeginRead를 사용하여 비동기 적으로 데이터를 수신하려면 NetworkStream & TcpClient를 사용하고 있습니다. 이 작업에 타임 아웃을 적용해야하는데, 지정된 시간이 지나면 읽기가 중단됩니다.BeginReceive/BeginRead timeouts
내가 말할 수있는 한 NetworkStream 또는 TcpClient에서 지원되지 않습니다. ReceiveTimeout 속성이 있지만 이것은 동기식 동등한 - '읽기'에만 적용되는 것으로 보입니다.
기본 Socket 클래스도 BeginReceive 메서드에서 시간 제한을 지원하지 않는 것으로 보입니다.
필자는이 문제에 대해 조사한 결과, 다른 백그라운드 스레드를 설정하여 시간 초과 기간 내에 완료되지 않으면 작업을 취소 할 수 있다고 제안했습니다. 이것은 끔찍한 해킹처럼 보입니다. 확실히 더 좋은 방법이 있습니까?
조엘 취소 백그라운드 스레드를 사용하지 않는 대한 올바른 방향으로 우리를 지적하지만 넣다가 많은 사람들이있다 않는 무엇을, 명확하지 않다 1 스레드 (작업자 설문 조사)가 주기적으로 연결을 끊어 버립니다. 이는 소켓 핸들/etc를 해제하는 데 필요하며 의도적이거나 아닌 서비스 거부 공격과 같은 것이 있으면 중요합니다. – eselk
다른 옵션은 스레드를 사용하지 않는 ['System.Threading.Timer'] (http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx)입니다. – hangar