.Net Core 中使用 CancellationToken 的最佳实践
在本教程中,我们将了解 CancellationToken 以及如何使用它。
在以前,当我们有时间执行诸如耗时的 DB 调用、耗时的 HTTP 调用等操作时,我们没有选择取消它。
在应用程序中使用 CancellationToken 可带来多种好处,尤其是在改善响应能力、资源管理和用户体验方面。以下是一些主要优势:
**1. 提高响应能力**
用户体验:可以取消长时间运行的任务的应用程序可以快速响应用户操作,例如取消文件上传或下载,从而提供更好的用户体验。
实时调整:用户可以调整他们的操作(例如,停止搜索操作),而无需等待当前操作完成。
**2.资源管理**
高效利用资源:取消不必要的操作可避免浪费 CPU、内存和其他资源。这对于资源在众多用户之间共享的服务器端应用程序尤其重要。
数据库连接:在数据库操作中,使用 CancellationToken 可以释放原本被长时间运行的查询所占用的数据库连接。
**3.可扩展性**
处理高负载:应用程序可以通过取消不再需要的操作来更优雅地处理高负载,从而释放资源以处理新的传入请求。
并发控制:有效的取消有助于管理并发任务,确保将资源分配给最关键的操作。
**4. 错误处理和稳定性**
优雅关闭:当应用程序需要关闭或重新启动时,CancellationToken 允许优雅终止正在进行的操作,从而降低数据损坏或状态不一致的风险。
防止死锁:通过取消耗时过长的操作,可以减少死锁和其他并发问题的可能性。
**5. 超时实现**
自动超时:使用 CancellationTokenSource.CancelAfter 实现超时可以自动取消超过指定持续时间的任务,确保您的应用程序保持响应。
**6. 任务协调**
合作取消:CancellationToken 允许合作取消,其中操作定期检查令牌以查看是否请求取消,从而允许操作清理并正常终止。
链接取消令牌:您可以将多个 CancellationTokenSource 实例链接在一起,以同时取消多个操作,从而简化复杂任务的协调。
**7.简化代码维护**
标准模式:使用 CancellationToken 为任务取消建立标准模式,使代码更易于理解和维护。
一致处理:它提供了一种一致的方式来处理应用程序不同部分的取消,从用户发起的取消到自动超时和应用程序关闭。
**示例用例**
**Web 应用程序**:取消不再需要的数据库查询、文件上传/下载和 API 调用。
**桌面应用程序**:允许用户取消长时间运行的操作,如图像处理或数据分析。
**移动应用程序**:通过取消不再需要的后台操作来延长电池寿命。
**云服务**:通过响应扩展事件或维护窗口取消操作来有效地管理资源。
下面是如何使用 CancellationToken 取消正在进行的操作的简化示例:
public async Task LongRunningOperationAsync(CancellationToken cancellationToken) { for (int i = 0; i < 100; i++) { // Periodically check if cancellation is requested cancellationToken.ThrowIfCancellationRequested(); // Simulate some work await Task.Delay(100); } } public async Task MainAsync() { using var cts = new CancellationTokenSource(); // Cancel the operation after 2 seconds cts.CancelAfter(TimeSpan.FromSeconds(2)); try { await LongRunningOperationAsync(cts.Token); } catch (OperationCanceledException) { Console.WriteLine("Operation was canceled."); } }
点击此链接查看完整教程