Я хотел сделать несколько простых нагрузочных тестов для фрагмента кода, который я написал, с несколькими потоками, одновременно попадающими на фрагмент кода.
Теперь приведенный ниже пример кода № 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);
}
Первоначально у меня было следующее, и я ожидал того же результата, но я заметил, что мой процессор никогда не превышал 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());
});
}
}