在现代 C# 开发中,C#异步编程 已成为处理耗时操作的标准方式。然而,如果某个异步任务运行时间过长甚至卡死,我们就需要一种机制来安全地终止它。这时,C#取消令牌(CancellationToken)就派上用场了。本文将手把手教你如何使用 CancellationTokenSource 配合超时设置,实现CancellationToken超时自动取消功能,即使是编程小白也能轻松掌握。

CancellationToken 是 .NET 提供的一个轻量级结构,用于向正在运行的操作“发出信号”:用户或系统希望取消该操作。它通常与 CancellationTokenSource 配合使用——后者负责创建令牌并触发取消请求。
关键在于使用 CancellationTokenSource 的构造函数重载,传入一个表示超时毫秒数的参数。例如:
// 创建一个在 3 秒后自动触发取消的 CancellationTokenSourcevar cts = new CancellationTokenSource(TimeSpan.FromSeconds(3));CancellationToken token = cts.Token;一旦 3 秒过去,cts 会自动调用 Cancel(),所有监听该 token 的任务都会收到取消信号。
下面是一个模拟网络请求的异步方法,它会监听取消令牌,并在超时时安全退出:
using System;using System.Threading;using System.Threading.Tasks;public class Program{ public static async Task Main(string[] args) { // 设置 2 秒超时 using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(2)); try { await SimulateDownloadAsync(cts.Token); Console.WriteLine("下载成功完成!"); } catch (OperationCanceledException) { Console.WriteLine("任务因超时被自动取消!"); } } public static async Task SimulateDownloadAsync(CancellationToken token) { for (int i = 0; i < 10; i++) { // 检查是否被取消 token.ThrowIfCancellationRequested(); Console.WriteLine($"正在下载... {i + 1}/10"); await Task.Delay(500, token); // 使用 token 支持取消的延迟 } }}在这个例子中,如果 SimulateDownloadAsync 在 2 秒内未完成,CancellationTokenSource 会自动触发取消,导致 ThrowIfCancellationRequested() 抛出 OperationCanceledException,从而优雅地中止任务。
using 语句中使用 CancellationTokenSource,确保资源正确释放。token.IsCancellationRequested 或调用 ThrowIfCancellationRequested()。OperationCanceledException,应合理处理以避免程序崩溃。通过结合 CancellationTokenSource 与超时参数,我们可以轻松实现 异步任务取消 的自动化控制。这不仅提升了程序的健壮性,也改善了用户体验。掌握这一技巧,是迈向专业 C# 开发者的重要一步。
希望这篇教程能帮助你理解并应用 C# 中的取消令牌超时机制。动手试试吧!
本文由主机测评网于2025-12-16发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025128577.html