首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在c#中取消Parallel.ForEach中的单个任务或特定任务

在C#中,取消Parallel.ForEach中的单个任务或特定任务可以使用CancellationTokenSource和CancellationToken来实现。CancellationTokenSource是一个用于生成CancellationToken的工厂类,而CancellationToken则是一个用于取消操作的标记。

以下是一个示例代码,演示如何取消Parallel.ForEach中的单个任务或特定任务:

代码语言:txt
复制
using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // 创建一个CancellationTokenSource对象
        CancellationTokenSource cts = new CancellationTokenSource();

        // 获取CancellationToken
        CancellationToken token = cts.Token;

        // 创建一个并发队列用于存储任务结果
        ConcurrentQueue<int> results = new ConcurrentQueue<int>();

        // 启动Parallel.ForEach循环
        Parallel.ForEach(
            Enumerable.Range(1, 10),
            new ParallelOptions { CancellationToken = token },
            (i, loopState) =>
            {
                // 检查是否需要取消任务
                if (i == 5)
                {
                    // 取消特定任务
                    loopState.Stop();
                    return;
                }

                // 模拟任务执行
                Thread.Sleep(1000);

                // 将任务结果添加到并发队列中
                results.Enqueue(i);
            });

        // 输出任务结果
        foreach (int result in results)
        {
            Console.WriteLine(result);
        }

        Console.ReadLine();
    }
}

在上述示例中,我们首先创建了一个CancellationTokenSource对象,然后通过调用其Token属性获取了一个CancellationToken。接下来,我们使用Parallel.ForEach方法来执行一系列任务,通过将ParallelOptions的CancellationToken属性设置为我们获取的CancellationToken,以便在任务执行过程中检查是否需要取消任务。

在任务执行的委托中,我们首先检查当前任务的索引是否为5,如果是,则调用loopState.Stop()方法来取消特定任务。然后,我们模拟任务的执行,将任务结果添加到并发队列中。

最后,我们遍历并发队列,输出任务结果。

这里推荐腾讯云的云服务器CVM产品,它提供了高性能、可靠稳定的云服务器实例,适用于各种应用场景。您可以通过以下链接了解更多关于腾讯云服务器CVM的信息:腾讯云服务器CVM产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券