Это не столько ответ, как информация, чтобы помочь [User] ...
Have a read of this blog также have a read of this article about Entity Framework specifications for its async pattern support
DbContext не поточно-
Вы никогда не должны получить доступ к вашим DbContext-экземпляр из нескольких потоков одновременно. Это может привести к одновременному отправке нескольких запросов по одному и тому же соединению с базой данных. Это также повредит кеш первого уровня, который DbContext поддерживает, чтобы предложить свою карту идентификации, отслеживание изменений и функциональность подразделения работы.
В многопоточном приложении вы должны создать и использовать отдельный экземпляр класса DbContext в каждом потоке.
Так что если DbContext не является потокобезопасным, как он может поддерживать функции асинхронного запроса, введенные с EF6? Просто предотвращая выполнение нескольких операций async в любой момент времени (как описано в спецификациях Entity Framework для поддержки асинхронного шаблона). При попытке выполнить несколько действий на той же DbContext, например, параллельно, например, сбрасывая несколько запросов SELECT, параллельно с помощью метода DbSet.ToListAsync(), вы получите NotSupportedException со следующим сообщением:
Вторая операция началась в этом контексте до завершения предыдущей асинхронной операции. Используйте «ждут», чтобы убедиться, что какие-либо асинхронные операции были выполнены до вызова другого метода в этом контексте. Любые члены экземпляра не гарантируют безопасность потоков.
Асинхронные функции Entity Framework предназначены для поддержки асинхронной модели программирования, а не для обеспечения параллелизма.
Взятые из EF статьи:
"Безопасность Thread
Хотя потокобезопасность бы сделать асинхронную более полезным является ортогональной функцией Неясно, что мы могли когда-либо реализовать его поддержку в самых. в общем случае, учитывая, что EF взаимодействует с графиком, состоящим из кода пользователя для поддержания состояния, и нет простых способов гарантировать, что этот код также является потокобезопасным.
На данный момент EF обнаружит, пытается ли разработчик одновременно выполнять две операции асинхронного и бросить ».
Вы получаете доступ к * тому же * 'DbContext' из разных тем? –
можете ли вы прикрепить свой код? возможно, вы забыли добавить 'configureawait (false)' для захвата контекста –
Да, Fedeico Dipuma – User