¿Puedo cancelar StreamReader.ReadLineAsync con un CancellationToken?

Cuando cancelo mi método asíncrono con el siguiente contenido llamando alCancel() método de miCancellationTokenSource, se detendrá eventualmente. Sin embargo desde la lineaConsole.WriteLine(await reader.ReadLineAsync()); toma bastante tiempo completar, intenté pasar mi CancellationToken aReadLineAsync() también (esperando que devuelva una cadena vacía) para que el método responda mejor a miCancel() llamada. Sin embargo no pude pasar unCancellationToken aReadLineAsync().

¿Puedo cancelar una llamada aConsole.WriteLine() oStreamreader.ReadLineAsync() y si es así, ¿cómo lo hago?

Por que esReadLineAsync() no aceptar unCancellationToken? Pensé que era una buena práctica dar a los métodos asíncronos una opciónCancellationToken parámetro incluso si el método aún se completa después de ser cancelado.

StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
    if (ct.IsCancellationRequested){
        ct.ThrowIfCancellationRequested();
        break;
    }
    else
    {
        Console.WriteLine(await reader.ReadLineAsync());
    }
}

Actualizar Como se indica en los comentarios a continuación, elConsole.WriteLine() la llamada sola ya estaba ocupando varios segundos debido a una cadena de entrada mal formateada de 40,000 caracteres por línea. Desglosar esto resuelve mis problemas de tiempo de respuesta, pero todavía estoy interesado en cualquier sugerencia o solución alternativa sobre cómo cancelar esta declaración de larga duración si por alguna razón se pretendía escribir 40,000 caracteres en una línea (por ejemplo, cuando se volcó toda la cadena en un archivo).

Respuestas a la pregunta(4)

Su respuesta a la pregunta