在.NET中,应该避免使用Thread.Abort()强制终止线程(会导致资源泄漏和不一致状态)。推荐使用CancellationToken实现优雅的线程终止。
using System; using System.Threading.Tasks; class Program { static async Task Main() { var cts = new CancellationTokenSource(); // 启动任务 Task workerTask = Task.Run(() => WorkerMethod(cts.Token), cts.Token); Console.WriteLine("主线程:等待3秒后再请求停止..."); await Task.Delay(3000); // 请求任务停止 cts.Cancel(); // 等待任务完成 try { await workerTask; } catch (OperationCanceledException) { Console.WriteLine("任务已取消"); } } static void WorkerMethod(CancellationToken token) { int counter = 0; while (!token.IsCancellationRequested) { Console.WriteLine($"工作:计数 = {counter++}"); Thread.Sleep(500); } } }
using System; using System.Threading; class Program { static void Main() { // 创建取消令牌源(用于通知线程停止) var cts = new CancellationTokenSource(); // 启动线程 Thread workerThread = new Thread(() => WorkerMethod(cts.Token)); workerThread.Start(); Console.WriteLine("主线程:等待3秒后请求停止线程..."); Thread.Sleep(3000); // 请求线程停止 Console.WriteLine("主线程:请求线程停止..."); cts.Cancel(); // 等待线程安全退出 workerThread.Join(); Console.WriteLine("主线程:线程已安全退出"); } static void WorkerMethod(CancellationToken token) { int counter = 0; Console.WriteLine("工作线程:开始运行..."); while (!token.IsCancellationRequested) { // 执行工作 Console.WriteLine($"工作线程:计数 = {counter++}"); Thread.Sleep(500); // 模拟工作 } Console.WriteLine("工作线程:收到停止请求,正在退出..."); } }