.NET异步任务取消指南:优雅控制长时间运行操作

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

.NET中通过协作方式取消长时间运行的任务。使用CancellationTokenSource发送取消请求,CancellationToken用于监控任务。任务定期检查令牌状态,接收到取消信号后优雅停止工作。示例展示了如何创建和传递令牌,以及处理取消请求,确保资源正确释放。

🎯

关键要点

  • 在.NET中,取消长时间运行的任务是协作式的,代码必须同意停止。
  • CancellationTokenSource用于发送取消请求,CancellationToken用于监控任务。
  • 任务定期检查CancellationToken的状态,以决定是否停止工作。
  • 创建CancellationTokenSource对象以发送取消信号并访问令牌。
  • 将CancellationToken传递给任务,以便任务能够监视取消请求。
  • 在任务内部使用循环检查CancellationToken,优雅地停止工作。
  • 可以从主线程触发取消请求,例如按下某个键。
  • 捕获OperationCanceledException以处理取消情况,避免程序崩溃。
  • 使用CancellationToken比直接停止线程更安全,可以正确清理资源。
  • 可以使用CancelAfter()方法设置超时,自动取消任务。

延伸问答

如何在.NET中优雅地取消长时间运行的任务?

在.NET中,可以使用CancellationTokenSource发送取消请求,任务通过CancellationToken监控该请求,并定期检查其状态以决定是否停止工作。

CancellationTokenSource和CancellationToken的作用是什么?

CancellationTokenSource用于发送取消请求,而CancellationToken用于监控任务,帮助任务决定何时停止工作。

如何在任务内部检查CancellationToken的状态?

在任务内部,可以使用token.IsCancellationRequested来检查CancellationToken的状态,如果返回true,则优雅地停止工作。

如何从主线程触发取消请求?

可以通过调用CancellationTokenSource的Cancel()方法来从主线程触发取消请求,例如在用户按下某个键时。

使用CancellationToken有什么好处?

使用CancellationToken比直接停止线程更安全,因为它允许任务在停止前进行资源清理,避免程序崩溃。

如何设置任务的超时自动取消?

可以使用CancellationTokenSource的CancelAfter()方法设置超时,例如cts.CancelAfter(TimeSpan.FromSeconds(5)),在5秒后自动取消任务。

➡️

继续阅读