CancellationToken не работает с WaitForConnectionAsync - PullRequest
0 голосов
/ 09 декабря 2018
NamedPipeServerStream server=new NamedPipeServerStream("aaqq");
var ct=new CancellationTokenSource();
ct.CancelAfter(1000);
server.WaitForConnectionAsync(ct.Token).Wait();

Я бы ожидал, что последняя строка выдаст OperationCanceledException через секунду, но вместо этого он висит навсегда.Почему?

1 Ответ

0 голосов
/ 09 декабря 2018

Токен отмены проверяется, только если вы используете асинхронную именованную трубу, которая не используется по умолчанию (да, 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();

Тогда токен отмены будет работать, как и ожидалось.

...