线程池饿死我有类似下面的一些代码:预防与计时器在同一时间运行的Parallel.ForEach
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打交道来从线程池中获取一个线程来安排回调。
我该如何解决这个问题?
DoTask当前正在执行什么工作? –
使用实体框架的DbContext进行数据库处理 –
我尝试用'Thread.Sleep()'模拟你的'DoTask()',我没有得到你描述的行为。你能否包含复制你的问题的短代码? – svick