Я написал простой тест, возможно, он неправильный и дает неожиданный (для меня) результат ... вот почему я прошу вас объяснить мне, а еще лучше исправить мой пример.
using System;
using System.Threading.Tasks;
namespace AsyncTest
{
class Program
{
static void Main(string[] args)
{
var startDate = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
InsertEntity(i);
Console.WriteLine($"{i}");
}
var endDate = DateTime.Now;
Console.WriteLine($"Total elapsed time: {(endDate - startDate).TotalMilliseconds}");
}
static void InsertEntity(int i)
{
using (var context = new TestContext())
{
var entity = new Entity
{
Code = $"Code {i}",
Name = $"Name {i}",
Description = $"Description {i}"
};
context.Entities.Add(entity);
context.SaveChanges();
}
}
}
}
Общее истекшее время: 9585ms
using System;
using System.Threading.Tasks;
namespace AsyncTest
{
class Program
{
static void Main(string[] args)
{
var startDate = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
InsertEntity(i).Wait();
Console.WriteLine($"{i}");
}
var endDate = DateTime.Now;
Console.WriteLine($"Total elapsed time: {(endDate - startDate).TotalMilliseconds}");
}
static async Task InsertEntity(int i)
{
using (var context = new TestContext())
{
var entity = new Entity
{
Code = $"Code {i}",
Name = $"Name {i}",
Description = $"Description {i}"
};
await context.Entities.AddAsync(entity);
await context.SaveChangesAsync();
}
}
}
}
Общее истекшее время: 13479ms
Я ожидал наоборот, учитывая эту асинхронностьпрограммирование может освободить потоки во время операций ввода-вывода ... это правильно?Так почему же это на самом деле медленнее?