Entity Framework Core - Asyn c / Syn c - DbContext - PullRequest
0 голосов
/ 30 января 2020

Я прихожу к вам за советом. Я разрабатываю консольное приложение (сервер), для которого требуется внешняя библиотека.

Я использую Entity Framework Core. Но у меня все еще есть пробелы в отношении концепции asyn c / await. Я прочитал немало вещей, попробовал немало вещей.

Я настроил архитектуру Entity / DAL / BLL, касающуюся базы данных и архитектуры ECS (Entity Component System).

У меня есть системы, которые вызывают событие (OnInitialized). В этом случае мне нужно загрузить разные данные из базы данных (в зависимости от системы).

Невозможно выполнить несколько параллельных запросов одновременно для одного и того же DbContext. У меня есть только одна база данных с несколькими таблицами.

Поэтому я должен разработать взаимодействие с базой данных полностью синхронизированным c?

Или есть шаблон для использования нескольких асинхронных c одновременно

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Асинхронный / ожидающий паттерн только косвенно связан с параллелизмом.

Я думаю, что вам сначала нужно точно понять, что происходит, когда вы «ждете» Задание для возврата. По моему мнению, ключевое слово await немного вводит в заблуждение. Он на самом деле не ждет возврата функции, вместо этого он запускает функцию, которую вы вызывали в отдельном потоке, сохраняет текущее состояние потока в обработчике состояний и заставляет путь выполнения программы возвращать управление вызывающей стороне. Как только вызванная функция завершена, этот механизм состояний восстанавливает состояние потока и продолжает выполнение.

Распараллеливание задач на самом деле довольно просто. Вместо того, чтобы «ждать» возврата функции, вы просто захватываете объекты-задачи, которые возвращаются функциями, собираете их в Collection и вызываете Task.WaitAll (collection). После этого все объекты задачи будут иметь свойство result, содержащее их результаты.

0 голосов
/ 30 января 2020

Entity Framework DbContext не является потокобезопасным. Таким образом, вы не должны использовать параллелизм DbContext. Но вы все равно можете использовать асин c методы для улучшения производительности в. NET Базовых приложениях Web API.

...