我有使用 Parallel.ForEach 的代码块,如下所示
public void ReadValuesFromServers()
{
Parallel.ForEach(serverList, server =>
{
//Some logic
});
}
我将经常调用 ReadValuesFromServers() 方法(每 1 或 2 秒),我知道 Parallel.ForEach() 内部使用线程来处理命令。我想知道由 Parallel.ForEach() 创建的线程是否会在执行 Parallel.ForEach() 后立即销毁,或者是否会保留在 ThreadPool 中以供下一组执行。还是使用
List<Task>
更好?在这种情况下?
最佳答案
这取决于 ThreadPool
启发式。如果 ThreadPool
判断当前池化线程数相对于当前工作需求过多,会自动decommit一些线程。否则,如果有频繁的工作需求,相同的线程将被 ThreadPool
一遍又一遍地重用。 .
如果您使用默认值 ParallelOptions
,这是预期的行为。 .但也可以指定 ParallelOptions.TaskScheduler
不同于 TaskScheduler.Default
,可能是自定义的,并强制执行您可以想象(并且您能够实现)的任何类型的线程使用方案。
关于c# - Parallel.ForEach() 是否在执行后立即销毁线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65177001/