Когда я отменяю свой асинхронный метод со следующим контентом, вызывая метод Cancel() моего CancellationTokenSource, он в конечном итоге остановится. Однако, так как строка Console.WriteLine(await reader.ReadLineAsync()); занимает совсем немного времени, я попытался передать свой CancellationToken на ReadLineAsync() (ожидая, что он вернет пустую строку), чтобы сделать метод более восприимчивым к моему вызову Cancel(). Однако я не мог передать CancellationToken в ReadLineAsync().
Можно ли отменить вызов Console.WriteLine() или Streamreader.ReadLineAsync(), и если да, как это сделать?
Почему ReadLineAsync() не принимает CancellationToken? Я подумал, что хорошей практикой является предоставление Async-методам необязательного параметра 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 символов в одну строку (например, при сбрасывании всей строки в файл).