When I cancel my async method with the following content by calling the Cancel()
method of my CancellationTokenSource
, it will stop eventually. However since the line Console.WriteLine(await reader.ReadLineAsync());
takes quite a bit to complete, I tried to pass my CancellationToken
to ReadLineAsync()
as well (expecting it to return an empty string) in order to make the method more responsive to my Cancel()
call. However I could not pass a CancellationToken
to ReadLineAsync()
.
Can I cancel a call to Console.WriteLine()
or Streamreader.ReadLineAsync()
and if so, how do I do it?
Why is ReadLineAsync()
not accepting a CancellationToken
? I thought it was good practice to give async methods an optional CancellationToken
parameter even if the method still completes after being canceled.
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
Update:
Like stated in the comments below, the Console.WriteLine()
call alone was already taking up several seconds due to a poorly formatted input string of 40.000 characters per line. Breaking this down solves my response-time issues, but I am still interested in any suggestions or workarounds on how to cancel this long-running statement if for some reason writing 40.000 characters into one line was intended (for example when dumping the whole string into a file).