C# CancellationToken 线程的停止开关

你正在运行一个线程(比如循环、下载、拍照)
你想中途让它停下来
就给它发一个停止信号
线程收到信号,就自己退出

核心三剑客(必须记住)
CancellationTokenSource → 造开关的人(遥控器)
CancellationToken → 开关本身(停止按钮)
IsCancellationRequested → 有没有人按停止?
——————————————————————————————————————————————————————————

using System;
using System.Threading; // 线程必须引用

class Program
{
static void Main()
{
// 1. 创建一个“遥控器”(能发取消信号)
CancellationTokenSource cts = new CancellationTokenSource();

// 2. 从遥控器里拿出“开关”
CancellationToken token = cts.Token;

// 3. 开启线程,把开关 token 传进去
Thread t = new Thread(() => RunTask(token));
t.Start();

// 4. 主线程等待 3 秒
Thread.Sleep(3000);

// 5. 按停止按钮!发送取消信号
Console.WriteLine("→ 发送停止命令!");
cts.Cancel();
}

// 这个方法在线程里跑
static void RunTask(CancellationToken token)
{
int i = 0;

// 循环干活
while (true)
{
// 🔥 最重要一句:检查有没有收到停止信号
if (token.IsCancellationRequested)
{
Console.WriteLine("→ 线程收到停止,安全退出!");
break; // 退出循环,线程结束
}

// 正常干活
Console.WriteLine("线程运行中:" + i);
i++;
Thread.Sleep(500);
}
}
}

posted @ 2026-04-04 23:00  菜鸟的奋斗军  阅读(17)  评论(0)    收藏  举报