Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Parallel.ForEach()是否在执行后立即销毁线程?_C#_.net_Multithreading - Fatal编程技术网

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

C# Parallel.ForEach()是否在执行后立即销毁线程?,c#,.net,multithreading,C#,.net,Multithreading,我有一个使用Parallel.ForEach的代码块,如下所示 public void ReadValuesFromServers() { Parallel.ForEach(serverList, server => { //Some logic }); } 我将经常调用ReadValuesFromServers()方法(每隔1或2秒),我知道Parallel.ForEach()在内部使用线程

我有一个使用Parallel.ForEach的代码块,如下所示

    public void ReadValuesFromServers()
    {
        Parallel.ForEach(serverList, server => 
        {
           //Some logic
        });
    }
我将经常调用ReadValuesFromServers()方法(每隔1或2秒),我知道Parallel.ForEach()在内部使用线程来处理命令。我想知道,由Parallel.ForEach()创建的线程是否会在执行Parallel.ForEach()后立即销毁,还是会在线程池中维护它以供下一次执行

或者在这种情况下使用
List
更好吗?

这取决于启发式。如果
ThreadPool
决定池中线程的当前数量与当前的工作需求相比过多,它将自动解除某些线程的工作。否则,如果经常需要完成工作,则相同的线程将被
线程池反复重用

如果使用默认的
并行选项
,这是预期的行为。但是也可以指定一个不同于的,可能是自定义的,并强制执行任何类型的线程使用方案,这取决于启发式。如果
ThreadPool
决定池中线程的当前数量与当前的工作需求相比过多,它将自动解除某些线程的工作。否则,如果经常需要完成工作,则相同的线程将被
线程池反复重用


如果使用默认的
并行选项
,这是预期的行为。但是也可以指定一个不同于的,可能是自定义的,并强制执行任何类型的线程使用方案,您可以想象(并且可以实现)。

很可能
ReadValuesFromServers
是IO绑定的,在这种情况下,您根本不应该使用
Parallel.xxx
,而是使用支持异步和等待模式的东西。
或者它将在ThreadPool中维护以供下一组执行。
如果它决定要在池中使用它们(很可能会这样做)。你当然不应该指望他们被“立即摧毁”。我能问问你为什么在乎吗?这感觉像是一个XY问题,@mjwills-我很想知道内部实现,因为我不想为平台每两秒钟调试和解除线程而增加额外的开销。如果是这样的话,我认为应该有一个单独的线程池来执行此操作。很可能服务器的
readvalues
是IO绑定的,在这种情况下,您根本不应该使用
Parallel.xxx
,而是使用支持异步和等待模式的东西。
或者它将在ThreadPool中维护以供下一组执行。
如果它决定要在池中使用它们(很可能会这样做)。你当然不应该指望他们被“立即摧毁”。我能问问你为什么在乎吗?这感觉像是一个XY问题,@mjwills-我很想知道内部实现,因为我不想为平台每两秒钟调试和解除线程而增加额外的开销。如果是这样,我认为应该有一个单独的线程池来执行此操作