在C#中,取消Parallel.ForEach中的单个任务或特定任务可以使用CancellationTokenSource和CancellationToken来实现。CancellationTokenSource是一个用于生成CancellationToken的工厂类,而CancellationToken则是一个用于取消操作的标记。
以下是一个示例代码,演示如何取消Parallel.ForEach中的单个任务或特定任务:
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产品介绍。
领取专属 10元无门槛券
手把手带您无忧上云