任务的负载测试.Run()在循环中与WhenAll()进行比较



我想对我编写的一段代码进行一些简单的负载测试,其中多个线程同时命中一段代码。

现在,下面的代码示例#1给了我预期的结果。但我不太清楚为什么样品#2没有给我同样的结果。有人能解释一下吗?

代码示例#1

private static FileCreator _fileCreater;
public static void Main(params string[] args)
{
_fileCreater = new FileCreator();
RunTasks().GetAwaiter().GetResult();
}
private static async Task RunTasks()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 100000; i++)
{
tasks.Add(Task.Run(() =>
{
_fileCreater.SaveMessage(new Message());
}));
}
await Task.WhenAll(tasks);
}

起初,我有下面的结果,我预计会有同样的结果,但我注意到我的CPU从未超过20%,这表明它并没有真正跨越多个线程

代码示例#2

private static FileCreator _fileCreater;
public static void Main(params string[] args)
{
_fileCreater =  new FileCreator();
RunTasks().GetAwaiter().GetResult();
}
private static async Task RunTasks()
{
for (int i = 0; i < 100000; i++)
{
await Task.Run(() =>
{
_fileCreater.SaveMessage(new Message());
});
}
}

您的第二段代码正在等待每个任务。。。因此,不,它们不会同时运行,因为您要等待每一个都完成,然后再开始下一个。

最新更新