for (int i = 0; i < someNumber; i++)
{
Task<myObject>.Run(() =>
{
// some work
// ...
Task<myObjectNew>.Run(() => { // other work });
});
}
我有一个循环,它创建了许多初始任务(比如高达100)。然后,这些任务中的每一个都执行一些小的工作单元,然后自己创建另一个任务。我注意到的是,在完成所有任务之前,最初的100个任务中没有任务开始。
如果初始Task创建了一个Thread而不是另一个Task,那么事情似乎很好,一旦创建了第一个外部任务,它就会开始执行(并生成一个新的Thread等)。
我没有看到过像以前那样的行为但是我再也没有任务创建另一个任务。
有什么想法吗?
答案 0 :(得分:1)
Task<T>
对象通过线程池进行管理,并且在启动速度方面受到限制。我不记得我当前的默认值,但基本的想法是,一旦线程池没有线程,新线程只会以每秒一个(或左右)的速率创建。
当您明确创建Thread
对象时,没有等待。它们是立即创建和开始的。在线程实际开始执行之前,可能会有几十毫秒的稍微延迟,但除此之外它实际上是瞬时的。
答案 1 :(得分:0)
使用线程池工作线程安排任务。
如果你想绕过线程池你可以将你的任务声明为LongRunning
,它将立即启动一个新线程。
如果您需要更多相关信息: https://msdn.microsoft.com/en-us/library/ff963549.aspx