В MySQLCommand BeginExecuteReader отсутствует параметр AsyncCallback, что делает его практически бесполезным.

StackOverflow https://stackoverflow.com/questions/1444884

Вопрос

Я надеюсь, что кто-нибудь здесь может мне помочь.

Компания, в которой я работаю, предпочла бы, чтобы я использовал MySQL вместо MSSQL.Итак, я скачал последнюю версию драйвера (6.1) и переношу уровень БД.

Однако я не могу найти функцию BeginExecuteReader, которая принимает обратный вызов в качестве параметра.

Это по какой-то причине?Или с MySQL это работает по-другому?

Насколько я понимаю, если код не вызывает обратный вызов, мне нужно будет опросить, что замедлит работу.Я также хочу избежать использования блокирующего потока для каждого соединения.

Есть идеи, как с этим справиться?(кроме переделки драйвера, что, наверное, мне не по силам)

р

Это было полезно?

Решение

Версия 6.3.4 MySQL Connector реализует асинхронные методы, но кажется, что она вызывает делегат только асинхронно, поэтому он не будет блокировать вызывающий поток, но не будет сохранять потоки из ThreadPool. Вот отчет об этой ошибке.

И, как вы сказали, у него нет параметра обратного вызова. Вот отчет об этой ошибке.

Я считаю поставщики данных Devart правильно реализовать асинхронные методы, но они не бесплатны.

В любом случае, асинхронные вызовы базы данных сами по себе НЕ подразумевают лучшую общую масштабируемость.Рекомендую прочитать статью "Должны ли мои вызовы базы данных быть асинхронными?"для более глубокого анализа.

Другие советы

я не знаю конкретно этого соединителя, но любой другой соединитель, который я видел для MySQL, просто ждет, пока сервер вернет данные во время вызова Execute() или query().самое близкое, что вы получите, - это использовать «небуферизованную» версию, которая немедленно возвращает результат из метода выполнения() или запроса(), но блокируется, когда вы пытаетесь запросить следующую строку, но она еще не поступила с сервера MySQL.

Поддержка потоков MySQL кажется мне второстепенной мыслью.

Вы не можете, например, через C API отменить выданный запрос;скорее, функция запроса просто блокируется.Для выполнения нескольких одновременных запросов на каждый запрос требуется один поток!

Попробуйте использовать Постгрес.Я не использовал его (меня оттолкнул C API - все эти определения типов), но он, безусловно, имеет правильную поддержку многопоточных запросов (например,асинхронные вызовы и т. д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top