C# 并行处理,内部循环,我们可以访问并行度吗?

C# 并行处理,内部循环,我们可以访问并行度吗?,c#,asp.net,multithreading,parallel-processing,parallel-foreach,C#,Asp.net,Multithreading,Parallel Processing,Parallel Foreach,在下面的循环中,我想添加逻辑来说明处理器1是否执行此操作,处理器2是否执行此操作等。我一直在尝试各种属性,如 Console.WriteLine("Domain ID = " + Thread.GetDomainID().ToString()); Console.WriteLine("Thread ID = " + Thread.CurrentThread.ManagedThreadId.ToString()); …但我看到线程ID在不断增加,所以它是一个处理器中有许多线程的线程。那么如何让1

在下面的循环中,我想添加逻辑来说明处理器1是否执行此操作,处理器2是否执行此操作等。我一直在尝试各种属性,如

Console.WriteLine("Domain ID = " + Thread.GetDomainID().ToString());
Console.WriteLine("Thread ID = " + Thread.CurrentThread.ManagedThreadId.ToString());
…但我看到线程ID在不断增加,所以它是一个处理器中有许多线程的线程。那么如何让1-4进入循环呢?域名ID我只是得到了相同的值

Parallel.ForEach(list.OrderBy(n => n.ScheduledBillingId),
    new ParallelOptions { MaxDegreeOfParallelism = 4  }, (item) => { });

我的问题是,我希望它能够将列表中的记录分成4组,并处理前25%的记录,依此类推。

对于您的工作和
并行。ForEach
您可以使用,如下所示:

// Partition the entire source array.
var rangePartitioner = Partitioner.Create(0, list.Count);
之后,只需为循环提供该分区器:

Parallel.ForEach(rangePartitioner, (range, loopState) =>
{
    // Loop over each range element without a delegate invocation.
    for (var i = range.Item1; i < range.Item2; ++i)
    {
        var taskToRun = list[i];
    }
});

我通常建议不要在asp.net代码中使用
parallel.foreach
-asp.net已经尝试使用线程池同时处理多个请求。如果您想在每个线程中执行不同的操作,那么
parallel.foreach
可能不是合适的工具。你能确切说明你需要什么以及为什么吗?例如,如果您有正在搜索的信息,您能展示一下您将编写什么样的代码吗?foreach(列表中的ScheduledBilling项。OrderBy(n=>n.ScheduledBillingId)){}我只想让这个web作业并行处理列表中的不同批次,以加快速度。由于端到端的运行速度很慢,但我担心的是,由于出现数据库错误,它试图在同一时间运行同一项。好像说过程1和过程2等都试图采取行动的第一项。刚接触并行处理,不确定是否需要做更多的工作分区与DOP无关。间接地,
并行。For/Foreach
使用DOP进行分区。但你为什么在乎?每个任务与其他任务的工作相同。您根本不应该关心记录是在哪个任务上处理的
var rangePartitioner = Partitioner.Create(0, source.Length, source.Length / 4);