C# CancellationToken 和 CancellationTokenSource 用法详解
CancellationToken 和 CancellationTokenSource 是 C# 中用于取消异步操作的机制。本篇攻略将详细讲解这两个类的用法。
CancellationTokenSource
CancellationTokenSource 类用于创建用于取消操作的标记(CancellationToken)。可以使用 CancellationTokenSource.Cancel() 方法来请求取消操作。下面是 CancellationTokenSource 的示例:
using System;
using System.Threading;
namespace CancellationTokenSourceExample
{
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
// 这里模拟一个异步操作
ThreadPool.QueueUserWorkItem(state =>
{
Console.WriteLine("异步操作开始执行,按任意键取消操作。");
for (int i = 0; i < 10; i++)
{
// 检查操作是否被取消了
if (token.IsCancellationRequested)
{
Console.WriteLine("操作已经被取消了。");
return;
}
Console.WriteLine(i);
Thread.Sleep(1000);
}
});
Console.ReadKey();
cancellationTokenSource.Cancel();
Console.WriteLine("请求取消异步操作");
Console.ReadKey();
}
}
}
上面的示例中,我们创建了一个 CancellationTokenSource 对象,然后通过它的 Token 属性获取到 CancellationToken 对象。然后我们将一个异步操作放入线程池中,并在其中检查 CancellationToken 是否被取消。
运行上面的代码,在异步操作开始执行时按任意键即可取消操作。
CancellationToken
CancellationToken 类用于检查是否应该取消异步操作。当 CancellationTokenSource 对象将其 CancellationToken.Tokens 属性暴露给多个任务时,每个任务都会检查该标记以确定它是否应取消。下面是 CancellationToken 的示例:
using System;
using System.Threading;
namespace CancellationTokenExample
{
class Program
{
static void Main(string[] args)
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken token = cancellationTokenSource.Token;
ThreadPool.QueueUserWorkItem(state =>
{
Console.WriteLine("异步操作开始执行");
for (int i = 0; i < 10; i++)
{
// 检查操作是否被取消了
if (token.IsCancellationRequested)
{
Console.WriteLine("操作已经被取消了。");
return;
}
Console.WriteLine(i);
Thread.Sleep(1000);
}
Console.WriteLine("异步操作已经完成");
}, token);
Console.ReadKey();
cancellationTokenSource.Cancel();
Console.WriteLine("请求取消异步操作");
Console.ReadKey();
}
}
}
上面的示例中,我们通过 CancellationToken 类来检查异步操作是否应该被取消。运行上面的代码,在异步操作开始之后按任意键即可取消操作,否则操作将继续执行。
总结
通过我们对 CancellationToken 和 CancellationTokenSource 的讲解,我们可以看出二者的配合使用可以很好的实现异步操作的取消。在异步操作中使用 CancellationToken 和 CancellationTokenSource 不仅可以在异步操作开始执行后随时取消操作,而且提高了应用程序的响应性,让应用程序更加友好。
介于 CancellationToken 的使用场景非常广泛,具体的实现方式也需要根据不同的业务场景进行适度的调整。以上示例仅作为参考使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# CancellationToken和CancellationTokenSource的用法详解 - Python技术站