Task.Run 不同的第二次执行
Task.Run different second execute
我是 C# 新手。
问题:
class Program
{
static void why()
{
List<Task> listOfDummyTask = new List<Task>();
for (int i = 0; i < 100; ++i)
{
Task hoho = Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Die");
});
listOfDummyTask.Add(hoho);
}
Task.WaitAll(listOfDummyTask.ToArray());
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Reset();
sw.Start();
why();
sw.Stop();
Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
Console.WriteLine("----------------------------------");
sw.Reset();
sw.Start();
why();
sw.Stop();
Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
Console.WriteLine("----------------------------------");
Console.WriteLine("End");
}
}
首先,我调用 why(),它打印 "Die" 相同的 4 次。
并打印 1 ~ 4 "Die"。
第一个 why() 秒表 returns 28,000 毫秒,但是当我调用第二个 why() 时,
打印"Die" 8次,同时打印5~8 "Die"..
第二个 why() 秒表 returns 10,000 ~ 14,000 毫秒。
为什么?
关键字是什么情况?
Task.Run 循环 100 次会将 100 个工作项排入默认调度程序(线程池)。如果线程池决定同时执行最多 4 个项目,那么它将从队列中取出 4 个工作项目并在大约 2 秒内完成它们。然后还需要四个,以此类推,直到全部完成。
没有真正期望有多少任务会并发执行,有多少任务会被推迟。
我是 C# 新手。
问题:
class Program
{
static void why()
{
List<Task> listOfDummyTask = new List<Task>();
for (int i = 0; i < 100; ++i)
{
Task hoho = Task.Run(() =>
{
Thread.Sleep(2000);
Console.WriteLine("Die");
});
listOfDummyTask.Add(hoho);
}
Task.WaitAll(listOfDummyTask.ToArray());
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Reset();
sw.Start();
why();
sw.Stop();
Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
Console.WriteLine("----------------------------------");
sw.Reset();
sw.Start();
why();
sw.Stop();
Console.WriteLine("{0} ms", sw.ElapsedMilliseconds.ToString());
Console.WriteLine("----------------------------------");
Console.WriteLine("End");
}
}
首先,我调用 why(),它打印 "Die" 相同的 4 次。
并打印 1 ~ 4 "Die"。
第一个 why() 秒表 returns 28,000 毫秒,但是当我调用第二个 why() 时,
打印"Die" 8次,同时打印5~8 "Die"..
第二个 why() 秒表 returns 10,000 ~ 14,000 毫秒。
为什么?
关键字是什么情况?
Task.Run 循环 100 次会将 100 个工作项排入默认调度程序(线程池)。如果线程池决定同时执行最多 4 个项目,那么它将从队列中取出 4 个工作项目并在大约 2 秒内完成它们。然后还需要四个,以此类推,直到全部完成。
没有真正期望有多少任务会并发执行,有多少任务会被推迟。