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