我知道关于这个话题有很多问题,我已经检查了所有的问题,但是找不到一个可行的解决方案。
我在WPF应用程序中同时启动了10个线程。
前四个线程同时启动,但其他作业开始延迟约5-10秒。我分享了下面的测试数据。
我该如何解决这个问题?
private void DoParallel()
{
for (int i = 0; i < 10; i++)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine(DateTime.Now.ToString());
DoSomeWork();
});
}
}
}
发布于 2019-02-27 22:47:19
这是设计好的。默认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();
});
}
}
}
https://stackoverflow.com/questions/54907952
复制相似问题