📜  c#cancellationtoken 示例 - C# (1)

📅  最后修改于: 2023-12-03 15:29:48.471000             🧑  作者: Mango

C# CancellationToken 示例

在 C# 中,可以使用 CancellationToken 类来实现异步任务的取消。本文将给出一个简单的 CancellationToken 示例。

代码示例

下面是一个简单的示例,演示了如何创建一个 CancellationTokenSource 对象,以及如何在异步任务中检查并响应 CancellationToken

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("任务开始运行");

        CancellationTokenSource cts = new CancellationTokenSource();

        // 在一秒钟后取消任务
        cts.CancelAfter(1000);

        try
        {
            // 模拟一个耗时的操作
            await Task.Run(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    Thread.Sleep(100);
                    // 检查是否有取消请求
                    cts.Token.ThrowIfCancellationRequested();
                }
            }, cts.Token);

            Console.WriteLine("任务已完成");
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("任务已取消");
        }

        Console.WriteLine("按任意键退出");
        Console.ReadKey();
    }
}
代码说明

首先,我们在 Main 方法中创建了一个 CancellationTokenSource 对象,用于取消异步任务。然后,我们使用 CancelAfter 方法在一定时间后自动取消任务。

接着,我们使用 Task.Run 方法创建了一个异步任务,它会模拟一个耗时的操作。在该任务中,我们使用 Thread.Sleep 方法来模拟等待,然后使用 cts.Token.ThrowIfCancellationRequested 检查是否有取消请求。

最后,我们使用 try-catch 块捕获 OperationCanceledException 异常,以响应取消请求。

运行结果

运行上述代码示例,可以得到以下输出:

任务开始运行
任务已取消
按任意键退出

可以看到,任务在一秒钟后被取消了,并输出了相应的提示信息。