【发布时间】:2015-11-22 02:29:19
【问题描述】:
有没有办法在 Parallel.FoEach 循环中找到线程 ID。我尝试使用 var threadId = Thread.CurrentThread.ManagedThreadId - 1;,但它没有为我提供我正在寻找的正确索引。
这是一个简单的例子:
private void TestProgram()
{
int numThreads = 1;
var values = new List<float>();
for (int i = 0; i < numThreads; ++i)
{
values.Add(i);
}
var data = new List<int>();
for (int i = 0; i < numThreads; ++i)
{
data.Add(i);
}
Parallel.ForEach(data, new ParallelOptions{MaxDegreeOfParallelism = numThreads}, i =>
//foreach (var i in data)
{
var threadId = Thread.CurrentThread.ManagedThreadId - 1; // make the index to start from 0
values[threadId] += i;
});
}
即使设置了MaxDegreeOfParallelism to 1,我仍然得到threadId 大于1。
在上述场景中,有没有办法在 Parallel.ForEach 中找到线程 ID?
注意:我可以在我使用的示例中使用 Parallel.For。但我的问题是在 Parallel.ForEach 中找到它
【问题讨论】:
-
Parallel.Foreach 是并行任务库的一部分。试试 Task.CurrentId 看看它的行为如何。
标签: c# multithreading parallel.foreach