Parallel.ForEach 是否使用来自 ASP.NET 线程池的线程?

Does Parallel.ForEach use threads from the ASP.NET thread pool?

我读到过在 ASP.NET 网络应用程序中使用 Task.Run 是个坏主意,因为它使用了线程池中的另一个线程,因此阻止了这个特定线程被用于服务要求。

和Parallel.ForEach不也是一样的情况吗?它不会使用线程池中的多个线程,从而防止这些特定线程被用于处理请求吗?

Isn't the same problem with Parallel.ForEach? Won't it use multiple threads from the thread pool and hence prevent these particular threads from being used to serve a request?

是的,会的。这意味着您会通过像这样用完多个请求来降低服务器的总吞吐量。 单个请求 会更快地完成,但它会更快地完成 以牺牲其他请求 为代价。

这还假设您的机器处于高负载状态。如果线程池上没有足够高的负载,那么它可以为该请求分配更多资源,而不会抑制服务其他请求的能力,并且为该请求分配更多资源可能会加速该请求。