我在使用 Parallel.ForEach 时遇到了一些问题。我需要模拟几个硬件组件,等待传入连接并回复它。
我目前的代码如下:
Task.Factory.StartNew(() => components, (component) =>
{
var listener = new TcpListener(component.Ip, component.Port);
while(true)
{
using(var socket = listener.AcceptSocket())
{
//Read out socket and send a reply
socket.Close();
}
}
});
我遇到的问题是:并非每个组件都会创建自己的线程。即使其中一个线程退出,它们仍然不会产生。
我集合中的当前组件数量是 40,产生的线程数是(或至少看起来是)33。
我的印象是 Parallel.Foreach() 将为传递给它的可枚举集合创建一个新的并行线程。
任何想法我做错了什么?