CancellationToken 的默认参数

作者:编程家 分类: c++ 时间:2025-11-20

CancellationToken 的默认参数

CancellationToken 是在多线程编程中常用的一种机制,用于取消或终止一个正在执行的任务。它是一种用于传递取消请求的对象,可以在多个线程之间共享。在 .NET 中,CancellationToken 类提供了相关的功能,并且它的构造函数有一个默认参数。

默认参数的作用

默认参数是在方法或函数的定义中指定的一种特殊值,如果在调用方法或函数时没有为该参数提供值,那么将使用默认值。CancellationToken 的构造函数中的默认参数可以在不提供特定 CancellationToken 实例时使用。

在多线程编程中,有时我们需要创建一个 CancellationToken 实例来取消一个任务。如果没有提供 CancellationToken 实例,可以使用 CancellationToken.None。这是 CancellationToken 的默认实例,它表示没有取消请求。

案例代码

下面是一个简单的示例,演示了如何使用 CancellationToken 的默认参数:

csharp

using System;

using System.Threading;

class Program

{

static void Main()

{

CancellationTokenSource cts = new CancellationTokenSource();

// 将 CancellationToken.None 作为默认参数传递给方法

DoWork(CancellationToken.None);

// 注册一个取消回调函数

cts.Token.Register(() =>

{

Console.WriteLine("任务已取消");

});

// 取消任务

cts.Cancel();

Console.ReadLine();

}

static void DoWork(CancellationToken cancellationToken)

{

// 检查是否请求了取消

if (cancellationToken.IsCancellationRequested)

{

Console.WriteLine("任务已取消");

return;

}

// 模拟一个耗时的任务

for (int i = 0; i < 5; i++)

{

Console.WriteLine($"正在执行任务 {i + 1}");

Thread.Sleep(1000);

}

Console.WriteLine("任务已完成");

}

}

取消任务的过程

在上述代码中,我们首先创建了一个 CancellationTokenSource 实例 cts,用于生成 CancellationToken 实例。然后,我们调用了一个名为 DoWork 的方法,并将 CancellationToken.None 作为默认参数传递给该方法。

在 DoWork 方法中,我们首先检查 cancellationToken.IsCancellationRequested 属性,以确定是否请求了取消。如果是,则输出"任务已取消"并返回。否则,我们模拟一个耗时的任务,并在每次迭代之后输出"正在执行任务 X"。最后,输出"任务已完成"。

在 Main 方法中,我们注册了一个取消回调函数,当 CancellationToken 被取消时,该函数将被调用,并输出"任务已取消"。然后,我们调用 cts.Cancel() 方法来取消任务。在控制台中,我们可以看到任务被取消的消息。

CancellationToken 的默认参数 CancellationToken.None 是一个表示没有取消请求的实例。通过将它作为默认参数传递给方法,我们可以在不提供特定 CancellationToken 实例时使用它。使用 CancellationToken 和取消回调函数,可以更好地控制和管理多线程任务的执行。