控制dotnet核心的ThreadPool中的线程数

fre*_*ish 1 c# threadpool .net-core

我在MacOS上运行dotnet核心版本2.1.3,并且尝试使用默认线程池进行操作没有成功。我试图以几种方式修改线程数(其中大多数是我用谷歌搜索的):

Program.cs

public static void Main(string[] args)
{
    ThreadPool.SetMinThreads(1, 1);
    ThreadPool.SetMaxThreads(1, 1);
    DoSomethingAsync();
}
Run Code Online (Sandbox Code Playgroud)

.csproj

<PropertyGroup>
  <ServerGarbageCollection>true</ServerGarbageCollection>
  <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
  <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
  <ThreadPoolMinThreads>1</ThreadPoolMinThreads>
  <ThreadPoolMaxThreads>1</ThreadPoolMaxThreads>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

环境变量

$ ComPlus_ThreadPool_ForceMinWorkerThreads=1 ComPlus_ThreadPool_ForceMaxWorkerThreads=1 dotnet run
Run Code Online (Sandbox Code Playgroud)

这些似乎都不起作用:

$ ps -M 97046
USER           PID   TT   %CPU STAT PRI     STIME     UTIME COMMAND
XXX 97046 s002    0.0 S    31T   0:00.02   0:00.07 dotnet exec /XXX
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
             97046         0.0 S    31T   0:00.00   0:00.00 
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?该操作系统特定吗?

mjw*_*lls 5

文档状态:

您不能将辅助线程或I / O完成线程的最大数量设置为小于计算机上的处理器数量。

由于您有8个处理器,因此不能将其设置为仅一个。

此外,致电:

ThreadPool.SetMaxThreads(1, 1);
Run Code Online (Sandbox Code Playgroud)

不会将您的进程限制为单个线程(即使您将其设置为1,也不会因为1小于8而不会)。它只是限制了线程池的大小。该程序可以(并且将)仍然使用多个线程。

例如,GC可能会在单独的线程上运行。或者,您可以创建自己的单独线程(不使用线程池)。限制线程池的最大大小不会对此产生影响。