📜  canceltoken.linkedtokensource c# 示例 - C# (1)

📅  最后修改于: 2023-12-03 14:40:01.160000             🧑  作者: Mango

canceltoken.linkedtokensource c# 示例

当我们使用并行编程或异步操作时,经常需要能够取消某些操作。.NET 提供了一个 CancellationToken 类型,它允许我们向这些各种操作发送取消请求。

CancellationTokenSource 是一个用于创建 CancellationToken 对象的类。它允许我们向 CancellationToken 发送取消请求。在本文中,我们将讨论如何使用 CancellationTokenSource 创建和链接多个 CancellationToken 对象。

示例

以下是一个简单的示例,演示如何使用 CancellationTokenSourceCancellationToken

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

class Program
{
    static async Task Main(string[] args)
    {
        using var cts1 = new CancellationTokenSource();
        using var cts2 = new CancellationTokenSource();

        var token1 = cts1.Token;
        var token2 = cts2.Token;

        var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token1, token2);
        var linkedToken = linkedTokenSource.Token;

        var task = Task.Run(() =>
        {
            try
            {
                while (!linkedToken.IsCancellationRequested)
                {
                    Console.Write("*");
                    Thread.Sleep(1000);
                }
            }
            catch (OperationCanceledException)
            {
                Console.WriteLine("\ncanceled");
            }
        }, linkedToken);

        await Task.Delay(3000);
        cts1.Cancel();

        await Task.Delay(3000);
        cts2.Cancel();

        await task;
    }
}

此示例创建两个 CancellationToken,然后使用 CreateLinkedTokenSource 方法组合它们。随后,该示例使用 linkedToken 执行一个耗时长的操作,并在两个原始 CancellationToken 中的任何一个被取消时抛出 OperationCanceledException

在运行此示例时,通过调用 cts1.Cancel()cts2.Cancel(),从控制台中生成一些输出,以模拟两个原始 CancellationToken 取消其操作。

用法

要在程序中创建 CancellationTokenSource 对象,请使用以下代码:

var cts = new CancellationTokenSource();

一旦有了 CancellationTokenSource,请将 Token 属性赋值给要与其关联的异步任务:

var cts = new CancellationTokenSource();
var token = cts.Token;

var task = Task.Run(() =>
{
    // 长时间运行的任务代码
}, token);

我们可以通过调用 Cancel 方法来请求取消任务的执行。此方法使与 CancellationTokenSource 关联的 Token 进入取消状态。当任务的 CancellationToken 进入取消状态时,将引发 OperationCanceledException 异常。

如果我们想要链接多个 CancellationToken,以便可以使用任何一个 CancellationToken 取消操作,则可以使用 CreateLinkedTokenSource 方法:

using var cts1 = new CancellationTokenSource();
using var cts2 = new CancellationTokenSource();

var token1 = cts1.Token;
var token2 = cts2.Token;

var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(token1, token2);
var linkedToken = linkedTokenSource.Token;
结论

在本文中,我们讨论了如何在 C# 中使用 CancellationTokenSource 创建和链接多个 CancellationToken。这些 CancellationToken 可以用于并行编程或异步操作,以在需要时安全地取消任务的执行。