Когда я отменяю свой метод асинхронизации со следующим контентом, вызывая метод Cancel()
моего CancellationTokenSource
, он в конечном итоге остановится. Однако, так как строка Console.WriteLine(await reader.ReadLineAsync());
занимает совсем немного времени, я попытался передать свой CancellationToken на ReadLineAsync()
(ожидая, что он вернет пустую строку), чтобы сделать метод более отзывчивым к моему вызову Cancel()
. Однако я не смог пройти CancellationToken
до ReadLineAsync()
.Могу ли я отменить StreamReader.ReadLineAsync с CancellationToken?
Могу ли я отменить звонок до 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());
}
}
Update Как указано в комментариях ниже, то Console.WriteLine()
вызов в одиночку уже занимают несколько секунд из-за плохо отформатированные строки ввода 40.000 символов в строке. Нарушение этого решения решает мои проблемы с ответом, но меня все еще интересуют любые предложения или обходные пути о том, как отменить этот долговременный оператор, если по какой-то причине было записано 40 000 символов в одну строку (например, при сбрасывании всей строки в файл).
Вы пытаетесь решить проблему неправильно. Вы написали чрезвычайно удобную для пользователя программу, она безумно прокручивает текст по экрану со скоростью намного выше, чем пользователь может прочитать. Теперь вы ищете решение «прекратить это глупость». Конечно, вы тоже, ваш пользователь тоже. Но это не настоящее решение, а правильное никогда не начнется в первую очередь. Напишите его в файл, выведите его в блокнот. Все лучше. –
'Вы пытаетесь решить неправильную проблему.' Спасибо за то, что вы поняли - вы абсолютно правы. –