NamedPipeServerStream.WaitForConnectionAsync(CancellationToken) 메서드가 토큰이 취소됐음에도 무기한 대기할 때 해결 방법
NamedPipeServerStream NamedPipeServerStream C#에서는 Named Pipe를 손쉽게 사용하기 위한 클래스인 NamedPipeServerStream , NamedPipeClientStream 을 지원합니다. 이 중 NamedPipeServerStream 은 그 이름에서 알 수 있듯 서버 기능 구현을 위한 스트림입니다. 연결 대기 서버는 당연히 클라이언트가 있어야 의미가 있습니다. 서버 혼자서는 아무것도 할 게 없기 때문이죠. 이런 당연한 얘기는 제쳐두고, 서버를 구현하다 보면 자연스레 클라이언트가 연결이 됐는지 안 됐는지 확인하는 코드가 필요하게 됩니다. TCP 소켓 같은 경우에는, AcceptAsync 등을 사용해 아예 클라이언트 소켓 자체를 받아오거나, Pending 메서드를 사용해 접속 대기중인 클라이언트가 있는지 확인할 수 있습니다. 그럼 NamedPipeServerStream 에는 뭐가 있을까요? WaitForConnection, WaitForConnectionAsync 당연히 NamedPipeServerStream 에도 클라이언트 접속 여부를 판단하는 메서드가 있습니다. 바로 WaitForConnection , WaitForConnectionAsync 입니다. 첫 번째 메서드는 동기 방식으로 대기합니다. 이 경우에는 해당 메서드가 호출된 시점부터 클라이언트가 접속할 때까지 호출된 스레드가 블럭 됩니다. 이번 포스트에서 다룰 것은 두 번째 메서드, WaitForConnectionAsync 입니다. CancellationToken WaitForConnectionAsync 메서드는 인자로 CancellationToken 을 받을 수 있습니다. 따라서, 해당 토큰에 취소 요청이 받아들여지면 대기를 중지하고