【发布时间】:2015-04-03 17:58:25
【问题描述】:
我正在使用命名管道在应用程序之间传递一些消息。
我的管道客户端使用PipeStream.ReadByte() 读取从服务器发送的消息。这会阻塞它正在运行的线程。
这种行为通常很好,但是,我想不出在线程被阻塞时处理该线程的好方法。当客户端退出时,该线程保持活动状态,直到流获得一些数据并允许再次检查循环变量。在服务器静默的情况下,线程只是活着。
Thread.Abort() 无效。
在转移到ReadByte() 方法之前,有没有办法从数据中检查流? PipeStream.Length 抛出UnsupportedException。
【问题讨论】:
-
为什么不使用取消令牌从流中异步读取 (
Stream.ReadAsync)。当客户端退出时,在关联的CancelationTokenSource上调用Cancel以取消挂起的IO。另外,为什么不为您的 IO 绑定操作使用异步任务而不是专用线程。参见例如我昨天在这里遇到的一个问题的类似问题/解决方案:stackoverflow.com/a/29423042/2573395 -
请注意,优化管道的引用解决方案可能是有意义的(即等待连接等)。
-
我刚才留下了一个答案。您是否愿意对此发表评论,或者我应该删除它,因为您已经找到了不同的解决方案?如果是这样,您能否将其发布为答案。
标签: c# multithreading named-pipes