В вашем случае async/await
не имеет никакого отношения к тому, как быстро что-то выполняется.Он используется для приостановки потока во время завершения ввода-вывода, чтобы ОС могла повторно использовать его для того, что еще нужно в данный момент.Короче говоря, это все о масштабируемости.Приведенный выше код выполняет 2 вызова ввода-вывода, один для извлечения и один для удаления (при вызове SaveChangesAsync
).
Вы можете упростить это и просто сделать 1 вызов для удаления, но это не имеет ничего общего с async / await.В приведенном выше коде нет причин сначала обращаться к БД, если вы уже знаете первичный ключ (при условии, что здесь ID является первичным ключом).
public static async Task Remove(int id)
{
using (var ctx = new StoreContext())
{
var product = new Product { ID = id};
ctx.Products.Attach(product);
ctx.Products.Remove(product);
await ctx.SaveChangesAsync();
}
}
Насколько DbSet<T>.Remove
это внутренне "очередиmsgstr "операция удаления, которая затем выполняется при вызове SaveChanges или SaveChangesAsync.Он ничего не «блокирует», но, может быть, вам следует уточнить, что вы подразумеваете под словом «блокировать», если вы верите иначе.