首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >线程不是同时启动的

线程不是同时启动的
EN

Stack Overflow用户
提问于 2019-02-27 22:41:03
回答 1查看 77关注 0票数 0

我知道关于这个话题有很多问题,我已经检查了所有的问题,但是找不到一个可行的解决方案。

我在WPF应用程序中同时启动了10个线程。

前四个线程同时启动,但其他作业开始延迟约5-10秒。我分享了下面的测试数据。

我该如何解决这个问题?

private void DoParallel()
{
    for (int i = 0; i < 10; i++)
    {
         Task.Factory.StartNew(() =>
          {
            Console.WriteLine(DateTime.Now.ToString());
            DoSomeWork();
          });
        }
    }
}

  • 27.02.2019 17:31:33
  • 27.02.2019 17:31:33
  • 27.02.2019 17:31:33
  • 27.02.2019 17:31:33
  • 27.02.2019 17:31:35
  • 27.02.2019 17:31:40
  • 27.02.2019 17:31:46
  • 27.02.2019 17:31:52
  • 27.02.2019 17:32:00
  • 27.02.2019 17:32:02
EN

回答 1

Stack Overflow用户

发布于 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();
          });
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54907952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档