2017-09-04 2 views
1

을 취소 할 수있는 방법은 :NamedPipeClientStream - 나는 <code>NamedPipeClientStream</code>을 사용하고 싶습니다 연결

var _Pipe = new NamedPipeClientStream(".", "test-a", PipeDirection.In); 
_Pipe.Connect(); 

불행하게도, 취소 토큰을 전달 할 수있는 방법이 없습니다. 그럼, 어떻게 연결을 취소 하시겠습니까? 시간 초과를 원하지 않습니다. 클라이언트가 연결이 성공하거나 취소가 요청 될 때까지 "영원히"기다려야합니다. ConnectAsync을 사용할 수 없습니다.

편집 : .NET Frameworkowkr 4.5.2 클래스 라이브러리를 사용하고 있으며 ConnectAsync와 같은 메서드는 없습니다 (연결 만 가능).

+0

왜'ConnectAsync'를 사용할 수 없습니까? 여기에서 사용하는 것은 정확히 올바른 도구입니다. –

+0

잘 모른다. Framework 4.5.2 Class Library를 사용하고 있으며 그러한 방법이 없습니다. – pwas

+0

4.5.2를 지원하지만 4.6을 지원하지 않는 OS 버전이 있다고 생각하지 않습니다. 'CancelAsync'가 4.6 –

답변

1

취소하려면 해당 파이프에서 Close() 또는 Dispose() 메서드를 호출하십시오. 나중에 다시 시도해야 할 경우 다른 파이프를 만드십시오.

Connect() 호출에서 잠자고 있던 스레드가 즉시 깨어나고 일부 예외가 발생하여 90 % 확신합니다. 아마도 Dispose를 호출하거나 "파이프가 닫힙니다."라고 말하면 아마도 ObjectDisposedException입니다. Close()를 호출하면 Win32 예외가 발생합니다.

필자는 특별히 파이프를 테스트 한 적이 없지만 파일 및 소켓에 대한 I/O 호출을 차단하여 Windows에서 일반적으로 발생합니다.

+0

오, 확실히 시도해 볼 가치가 있습니다. 힌트를 가져 주셔서 감사합니다! – pwas

+0

.NET 3.5 Close/Dispose에서 Connect (int timeout)가 차단 해제 또는 제거를하지 않는 것으로 나타났습니다. 슬픈 시간. – Robin

관련 문제