Могу ли я отменить StreamReader.ReadLineAsync с помощью CancellationToken?C#

Место общения программистов C#
Ответить
Anonymous
 Могу ли я отменить StreamReader.ReadLineAsync с помощью CancellationToken?

Сообщение Anonymous »

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

Подробнее здесь: https://stackoverflow.com/questions/286 ... ationtoken
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»