我知道有关此主题的问题很多,我已经审查了所有问题,却找不到可行的解决方案。
我正在WPF应用程序中同时启动10个线程。
前四个线程同时启动,但其他作业开始滞后大约5-10秒。我在下面共享测试数据。
我该如何解决这个问题?
private void DoParallel()
{
for (int i = 0; i < 10; i++)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine(DateTime.Now.ToString());
DoSomeWork();
});
}
}
}
答案 0 :(得分:1)
这是设计使然。默认的TaskScheduler
使用的是.NET ThreadPool
,它可能已饱和,您对此的控制有限。
如果愿意,可以创建自己的TaskScheduler
来更改此行为。例如,如果需要,您可以创建一个启动单独线程的线程。
如果您的代码触发的任务比已经执行的任务多,这种行为将变得更加明显:
private void DoParallel()
{
//This will over-saturate the ThreadPool unless you use your own TaskScheduler
for (int i = 0; i < 100; i++)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine(DateTime.Now.ToString());
DoSomeWork();
});
}
}
}