📅  最后修改于: 2023-12-03 14:40:01.160000             🧑  作者: Mango
canceltoken.linkedtokensource
c# 示例当我们使用并行编程或异步操作时,经常需要能够取消某些操作。.NET 提供了一个 CancellationToken
类型,它允许我们向这些各种操作发送取消请求。
CancellationTokenSource
是一个用于创建 CancellationToken
对象的类。它允许我们向 CancellationToken 发送取消请求。在本文中,我们将讨论如何使用 CancellationTokenSource
创建和链接多个 CancellationToken
对象。
以下是一个简单的示例,演示如何使用 CancellationTokenSource
和 CancellationToken
:
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
可以用于并行编程或异步操作,以在需要时安全地取消任务的执行。