2017-09-04 137 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

相关问题