Использует ли асинхронный метод EntityFrameworkCore поток, отличный от того, в котором создан DbContext?C#

Место общения программистов C#
Ответить
Anonymous
 Использует ли асинхронный метод EntityFrameworkCore поток, отличный от того, в котором создан DbContext?

Сообщение Anonymous »

DBContext db = new DbContext()
await db.Parents.FirstOrDefaultAsync(p => p.Id == id);

Как я знаю, DBContext не является потокобезопасным и не допускает многопоточной обработки, но почему мы можем использовать здесь метод await? Насколько я понимаю, await может привести к тому, что другой поток будет выполнять оставшийся код. Как это реализовано?
Обновление: Спасибо всем за то, что помогли мне понять, что await не означает многопоточность. Пока я выполняю приведенный ниже код, он выдает одно одновременное исключение.
Как в этом сценарии генерируется несколько потоков? Спасибо!

Вторая операция была начата в этом экземпляре контекста до завершения предыдущей операции. Обычно это вызвано тем, что разные потоки одновременно используют один и тот же экземпляр DbContext. Для получения дополнительной информации о том, как избежать проблем с потоками с помощью DbContext

//Inside itemService, it uses DbContext to
IList items = itemService.GetItemsForIndexNow();
Task t1 = ExportItemToBingIndexNow(items);
Task t2 = ExportItemToGoogleIndexNow(items);
await Task.WhenAll(t1, t2);
UpdateSubmitCount(items);

private async Task ExportItemToGoogleIndexNow(IList items)
{
//...
HttpClient httpClient = new HttpClient(clientHandler);
var response = await httpClient.PostAsync(url, contentData);
//...
}

//Inside this method, it uses DbContext to update items
private void UpdateSubmitCount(List items)
{
foreach (Item item in items)
{
item.IndexNowSubmitCount++;
}
itemService.FlushAllChanges();
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... e-which-db
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»