当我通过调用我的的Cancel()
方法取消下面内容的异步方法时,它最终会停止。但是,由于行Console.WriteLine(await reader.ReadLineAsync())
需要相当长的时间才能完成,因此我尝试将我的传递给ReadLineAsync()
(期望它返回一个空字符串),以便使该方法对我的Cancel()
调用更加响应。然而,我无法将传递给ReadLineAsync()
。
我可以取消对Console.WriteLine()
或Streamreader.ReadLineAsync()
的调用吗?如果可以,如何实现?
为什么ReadLineAsync()
不接受?我认为即使在被取消后该方法仍然完成,给异步方法提供可选的参数也是一种良好的实践。
StreamReader reader = new StreamReader(dataStream);
while (!reader.EndOfStream)
{
if (ct.IsCancellationRequested){
ct.ThrowIfCancellationRequested();
break;
}
else
{
Console.WriteLine(await reader.ReadLineAsync());
}
}
更新:
如下面的评论所述,由于每行40,000个字符的输入字符串格式不正确,Console.WriteLine()
调用本身就已经花费了几秒钟。将其拆分可以解决我的响应时间问题,但我仍然对任何关于如何取消这个长时间运行的语句的建议或解决方法感兴趣,如果有某种原因需要将40,000个字符写入一行(例如将整个字符串倾销到文件中)。