2017-09-04 85 views
1

我想使用NamedPipeClientStreamNamedPipeClientStream - 沒辦法取消連接

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

不幸的是,有沒有辦法通過取消標記。那麼,如何取消連接?我不想超時 - 我的客戶端需要等待「永遠」,直到連接成功或請求取消。 ConnectAsync不可用。

編輯: 我使用.NET Frameowkr 4.5.2類庫,並沒有這樣的像ConnectAsync的方法(僅連接可用)。

+0

爲什麼'ConnectAsync'不可用?這正是在這裏使用的正確工具。 –

+0

不知道。我正在使用Framework 4.5.2類庫,並沒有這樣的方法。 – pwas

+0

我不認爲有任何支持4.5.2的操作系統版本,但不支持4.6。 'CancelAsync'被添加到4.6 –

回答

1

要取消,請在該管道上調用Close()或Dispose()方法。如果您需要稍後重試,請爲此創建另一個管道。

我90%確定在Connect()調用中睡眠的線程將立即喚醒,並失敗並出現一些異常。可能是ObjectDisposedException,如果你調用Dispose,或者一些「管道正在關閉」。如果調用Close(),則會出現Win32異常。

我從來沒有專門對管道進行過測試,但這就是Windows中通常會發生的阻塞I/O調用文件和套接字的情況。

+0

哦,絕對值得一試。感謝提示! – pwas

+0

請注意,在.NET 3.5 Close/Dispose不會導致Connect(int timeout)解除阻塞或拋出。悲傷的時刻。 – Robin

相關問題