.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秒后自动取消任务。
➡️