编辑
2025-09-24
C#
00

目录

摘要
正文

摘要

.NET 提供了一个类方便用来发出操作取消的信号,这个类就是CancellationToken,它的好处在于它可以在任意数量的线程之间、线程池任务之间、Task之间传递信号,并且所需的代码很简单。通常用于下载超时中断、用户取消任务等情况。

CancellationToken 通常搭配 CancellationTokenSource 使用,后者是前者的一个管理类,使用 CancellationTokenSource 的 Token 属性,可以获取CancellationToken,并控制信号的发送。这两个类都属于命名空间 System.Threading

在异步编程中,只需将 Token 作为一个参数传入异步方法中。在异步方法外便能通过 CancellationTokenSource.Cancel 方法发出取消信号或者 CancelAfter 方法在一段时间后发出取消信号,这会改变 Token 的 isCancellationRequested 属性。在异步方法内,通过这个属性获取取消信号,并作出对应的处理操作。

正文

一个例子

image.png

C#
CancellationTokenSource cts = new CancellationTokenSource(); private void Form1_Load(object sender, EventArgs e) { } private void Run() { this.Invoke(new Action(() => { pbar.Value++; this.Text = pbar.Value.ToString(); })); } private void btnStart_Click(object sender, EventArgs e) { pbar.Value = 0; var t = new Task(() => { for (int i = 0; i < pbar.Maximum; i++) { if(!cts.IsCancellationRequested) { Run(); Thread.Sleep(1000); } } }, cts.Token); t.Start(); } private void btnPause_Click(object sender, EventArgs e) { cts.Cancel(); } private void btnPause5_Click(object sender, EventArgs e) { cts.CancelAfter(5000); }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!