wez*_*ten 5 c# asynchronous named-pipes
NamedPipeServerStream server=new NamedPipeServerStream("aaqq");
var ct=new CancellationTokenSource();
ct.CancelAfter(1000);
server.WaitForConnectionAsync(ct.Token).Wait();
Run Code Online (Sandbox Code Playgroud)
我希望最后一行OperationCanceledException在一秒钟后抛出一个,但它会永远挂起。为什么?
Kev*_*sse 10
仅当您使用异步命名管道时才会检查取消令牌,这不是默认值(是的,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();
Run Code Online (Sandbox Code Playgroud)
然后取消令牌将按预期工作。