gpt4 book ai didi

c# Process.GetCurrentProcess().Threads.Count 在使用 MaxDegreeOfParallelism 时未返回预期?

转载 作者:太空宇宙 更新时间:2023-11-03 19:06:21 25 4
gpt4 key购买 nike

我正在做这样的事情..

Task.Factory.StartNew(() =>{ 
Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = 10 }, (listitem, state) =>
{
//do stuff here
Console.writeln(Process.GetCurrentProcess().Threads.Count);
});
});

我的应用程序的线程数总是超过 10 个?限制我的应用程序使用的线程数我做错了什么?

最佳答案

根据 MSDN :

By default, For and ForEach will utilize however many threads the underlying scheduler provides, so changing MaxDegreeOfParallelism from the default only limits how many concurrent tasks will be used.

因此,线程数 将超过 10,但是单次运行的线程不会超过 10 个。这为底层框架节省了跟踪每个线程并向其附加代码的麻烦,如果另一个操作出现故障,则可能会破坏该操作的稳定性。相反,我们发现它会创建任意多个线程并限制一次可以运行的线程数。

您甚至可以通过向类中添加一个计数来测试它,并查看它达到了多高:

// In the class scope
int _count = 0;
int MaxCount = 0;
object key = new object();

int Count
{
get { lock(key) return _count; }
set
{
lock(key)
{
_count = value;
if(_count > MaxCount) MaxCount = value;
}
}
}
...
Task.Factory.StartNew(() =>{
Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = 10 }, (listitem, state) =>
{
Count++;
Console.writeln(Process.GetCurrentProcess().Threads.Count);
Count--;
});
});

关于c# Process.GetCurrentProcess().Threads.Count 在使用 MaxDegreeOfParallelism 时未返回预期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26870921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com