Cancel()
当我通过调用my的方法取消具有以下内容的异步方法时CancellationTokenSource
,它将最终停止。但是,由于该行Console.WriteLine(await reader.ReadLineAsync());
需要相当长的时间才能完成,因此我尝试将我CancellationToken
的 toReadLineAsync()
也传递给(期望它返回一个空字符串),以使该方法对我的Cancel()
调用更具响应性。但是我无法通过CancellationToken
to 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 个字符(例如,将整个字符串转储到一份文件)。