C# 在中间取消任务
我有一个关于取消正在运行的任务的问题。我阅读了有关的所有内容,但在使用它时,如果存在这样的请求,则必须签入代码 当我们处理循环时,这是一个适当的解决方案。 但是,如果我们执行的操作需要很长时间,例如从数据库中进行选择需要几分钟,或者将非常大的文件写入磁盘,那么情况又如何呢。 我们如何取消此作业(在执行过程中),同时允许我们优雅地退出,即释放资源、清理内存等。C# 在中间取消任务,c#,task-parallel-library,task,C#,Task Parallel Library,Task,我有一个关于取消正在运行的任务的问题。我阅读了有关的所有内容,但在使用它时,如果存在这样的请求,则必须签入代码 当我们处理循环时,这是一个适当的解决方案。 但是,如果我们执行的操作需要很长时间,例如从数据库中进行选择需要几分钟,或者将非常大的文件写入磁盘,那么情况又如何呢。 我们如何取消此作业(在执行过程中),同时允许我们优雅地退出,即释放资源、清理内存等。 (例如,断开与数据库的连接,删除从磁盘创建的部分文件)。Stephen Toub已经在中回答了这个问题 这篇文章的摘要是,你的问题实际上是
(例如,断开与数据库的连接,删除从磁盘创建的部分文件)。Stephen Toub已经在中回答了这个问题 这篇文章的摘要是,你的问题实际上是两个问题:
Stephen Toub在描述问题和解决方案方面做得更好。除了等待任务到达可以响应取消请求的点之外,任何类型的强制取消看起来都不是很优雅。您必须重写线程执行的代码,以定期检查挂起的取消。例如,分块编写文件或执行几个较小的SELECT查询。我同意它不会100%优雅。正因为如此,我希望能够进行干预并释放资源。您必须同意,正如我上面所描述的,有些场景不需要等待它们完成。