当前位置:首页C# > 正文

C# 使用CancellationTokenSource取消多线程

作者:野牛程序员:2023-12-28 19:56:11C#阅读 2458

使用CancellationTokenSource 可以方便地取消多线程操作。以下是一个简单的示例,演示如何在C#中使用CancellationTokenSource取消多线程:

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();

        // 启动一个任务来执行工作
        Task.Run(() => DoWork(cancellationTokenSource.Token));

        // 模拟一些时间后取消任务
        Thread.Sleep(2000);
        cancellationTokenSource.Cancel();

        Console.WriteLine("主线程已请求取消任务。");
        Console.ReadLine();
    }

    static void DoWork(CancellationToken cancellationToken)
    {
        try
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                // 模拟执行一些工作
                Console.WriteLine("正在执行工作...");
                Thread.Sleep(500);
            }
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("任务已被取消。");
        }
    }
}

在这个例子中,创建了一个 CancellationTokenSource 对象,并传递其 Token 属性给 DoWork 方法。DoWork 方法中使用了 while 循环来模拟一些工作,同时通过 cancellationToken.IsCancellationRequested 来检查是否已经取消任务。主线程在启动任务后等待一段时间后调用 Cancel 方法取消任务。

请注意,如果 DoWork 方法中执行的工作涉及到阻塞操作(如 I/O 操作),需要在适当的地方检查 cancellationToken.IsCancellationRequested 并手动抛出 OperationCanceledException,以确保及时取消任务。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击