Могу ли я отменить StreamReader.ReadLineAsync с помощью CancellationToken?
Когда я отменяю свой асинхронный метод со следующим содержанием, вызываяCancel()
метод моегоCancellationTokenSource
, это остановится в конце концов. Однако так как линияConsole.WriteLine(await reader.ReadLineAsync());
занимает совсем немного, я попытался передать свой CancellationTokenReadLineAsync()
а также (ожидая, что он вернет пустую строку), чтобы сделать метод более отзывчивым на мойCancel()
вызов. Однако я не мог пройтиCancellationToken
вReadLineAsync()
.
Могу ли я отменить звонокConsole.WriteLine()
или жеStreamreader.ReadLineAsync()
и если да, то как мне это сделать?
ПочемуReadLineAsync()
не принимаяCancellationToken
? Я думал, что это хорошая практика, чтобы дать асинхронным методамCancellationToken
параметр, даже если метод все еще завершается после отмены.
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
Обновить Как указано в комментариях ниже,Console.WriteLine()
один только вызов уже занимал несколько секунд из-за плохо отформатированной входной строки из 40 000 символов в строке. Разрушение этого решает мои проблемы со временем ответа, но я все еще интересуюсь любыми предложениями или обходными путями относительно того, как отменить это долговременное утверждение, если по какой-то причине было записано 40 000 символов в одну строку (например, при выгрузке всей строки в файл).