我有一些类似于以下的代码:
long progress = 0;
using (Timer timer = new Timer(state => { Console.Write(Interlocked.Read(ref progress); }, null, 5000, 5000)
{
Parallel.ForEach(list, item =>
{
item.DoTask();
Interlocked.Incrememt(ref progress);
}
}
我似乎遇到了线程池饥饿,因为写入控制台的数字是偶尔写入的——当然不是每 5 秒一次。在快速连续写入三个数字之前,可能会有 15 秒的长时间停顿。我猜定时器正在与 Parallel.ForEach 战斗以从线程池中获取一个线程来安排回调。
我该如何解决这个问题?