Для приложения, над которым я работаю, я вынужден использовать соединение ODBC для доступа к базе данных. Одна проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как и даже возможно ли использовать это асинхронно. Кто-нибудь знает о возможном обходном пути, если это действительно невозможно?
Можно ли использовать System.Data.Odbc асинхронно с ASP.NET Core?
- Используйте Dapper: stackoverflow.com/a/25545312/2557682 20.12.2019
Ответы:
Многозадачность и веб-серверы — странная пара.
С одной стороны, веб-сервер выполняет массовую многопоточность — обычно 1 поток на соединение — автоматически. Несколько параллельных запросов приятно параллельны.
С другой стороны, вы никогда не должны использовать многозадачность на стороне сервера. Ожидается, что страница быть построенным с нуля, заполненным в соответствии с запросом, обработанным, отрендеренным и удаленным из памяти как можно скорее. Вы либо слишком долго будете хранить страницу в памяти, либо никогда не получите результата до того, как страница и все, что с ней связано, будет удалено.
Если есть какая-либо многозадачность, она должна быть выполнена на стороне клиента. Обычно с использованием некоторого JavaScript. В частности АЯКС. Затем клиент может даже обращаться к специальному веб-сервису только для этой цели (поэтому веб-сервер остается свободным для «реальных» запросов.
async/await
, но до этого нам приходилось использовать Overlapped IO в Win32 иepoll
/select
в Linux, и эта практика насчитывает десятилетия. (Каждый поток стоит как минимум несколько сотен КБ, попробуйте сделать это в конце 1990-х, когда у вас было только 64 МБ ОЗУ для игры). 18.12.2020