c# - Parallel.ForEach() 是否在执行后立即销毁线程?

标签 c# .net multithreading

我有使用 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/

相关文章:

.net - REST、HTTP 动词和 .NET 和 silverlight 中的当前开发

.net - 当且仅当时间部分 = 00 :00:00? 时,如何在显示中抑制 .NET DateTime 的时间部分

java - 同步方法是否必须位于使用它的类的外部?

linux - 使用 sched_setaffinity 固定到核心后如何取消固定线程?

c# - 使用 protobuf-net 序列化巨大的复合图列表导致内存不足异常

c# - 通过 MouseDown 创建一个圆并移动它

c# - 将 DataGrid 列标题居中对齐

c# - 将密码存储在加密的 cookie 中?

c# - 我可以在 Forms.TreeView 中的节点之间添加空间吗?

java - 什么是 ParallelStream 队列行为?