返回

C# 取消任务以实现更强大的应用程序

后端

取消长时间运行的任务是现代编程中必不可少的一部分。它使应用程序能够在用户或外部因素请求时停止正在进行的操作。在 C# 中,通过 CancellationTokenSourceCancellationToken 类轻松实现任务取消。

了解取消令牌

CancellationTokenSource 创建一个可取消令牌,而 CancellationToken 代表取消请求。通过传递 CancellationToken 给任务,可以监控取消请求并根据需要做出响应。

检测取消

要检测取消,可以使用 IsCancellationRequested 属性:

if (token.IsCancellationRequested)
{
    // 任务已被取消,执行清理操作
}

使用 WaitHandle 属性

CancellationTokenSource 还提供了一个 WaitHandle 属性,可以用于等待取消请求:

// 阻塞调用,直到取消令牌被取消
tokenSource.Token.WaitHandle.WaitOne();

注册取消回调

可以使用 Register 方法注册一个回调函数,在取消令牌被取消时调用:

tokenSource.Token.Register(() =>
{
    // 取消令牌已取消,执行清理操作
});

取消任务

要取消任务,只需调用 CancellationTokenSource.Cancel() 方法:

// 取消取消令牌,导致与之关联的所有任务取消
tokenSource.Cancel();

实战场景

取消任务的常见场景包括:

  • 长时间运行的数据库查询: 如果用户在查询完成前导航到其他页面,可以取消查询。
  • 网络请求: 在用户切换到离线模式时,可以取消网络请求。
  • 后台处理: 在应用程序关闭时,可以取消后台处理任务。

优点

取消任务有以下优点:

  • 增强用户体验: 用户可以随时取消耗时的操作,从而获得更好的响应能力。
  • 提高资源效率: 取消不必要的任务可以释放系统资源,用于其他操作。
  • 提高鲁棒性: 取消机制可以防止应用程序因长时间运行的任务而挂起或崩溃。

最佳实践

以下是一些取消任务的最佳实践:

  • 尽早传递取消令牌: 将取消令牌尽快传递给任务。
  • 定期检查取消: 在任务循环中定期检查 IsCancellationRequested 属性。
  • 正确处理取消: 在取消任务时,应立即释放所有资源并执行任何必要的清理操作。

结论

取消任务是 C# 中一项强大的功能,它允许应用程序在需要时停止正在进行的操作。通过了解取消令牌并遵循最佳实践,开发人员可以创建响应迅速、资源高效且鲁棒的应用程序。