c# - CancellationToken 不适用于 WaitForConnectionAsync

标签 c# asynchronous named-pipes

NamedPipeServerStream server=new NamedPipeServerStream("aaqq");
var ct=new CancellationTokenSource();
ct.CancelAfter(1000);
server.WaitForConnectionAsync(ct.Token).Wait();

我希望最后一行在一秒钟后抛出 OperationCanceledException,但它永远挂起。为什么?

最佳答案

仅当您使用异步命名管道时才会检查取消标记,这不是默认设置(是的,API 的设计确实很糟糕)。要使其异步,您必须在 PipeOptions 中提供正确的值:

NamedPipeServerStream server = new NamedPipeServerStream("aaqq", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
var ct = new CancellationTokenSource();
ct.CancelAfter(1000);
server.WaitForConnectionAsync(ct.Token).Wait();

然后取消 token 将按预期工作。

关于c# - CancellationToken 不适用于 WaitForConnectionAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53695427/

相关文章:

c# - iOS 连续 TCP 请求失败

c# - 在VS 2008解决方案中添加了项目;建立依赖性获取编译器错误CS0246

servlets - 带有嵌入式 Jetty 的异步 Servlet

c# - 关于套接字编程的 APM、EAP 和 TPL

javascript - async.series 和 javascript 变量

java - 为什么java的RandomAccessFile在linux上不返回?

c# - 为什么我的反序列化对象为空?

c# - 在 Page_Load 中调用异步方法

linux - 如何确定是否可以写入管道

c - 模拟流数据