AsyncPattern имеет несколько применений - это в основном оптимизация производительности сервера, которая позволяет освободить потоки запросов рабочего пула на блокирующие операции. Например, когда происходит длительная операция блокировки, такая как доступ к БД, если вы используете API асинхронной БД на сервере с AsyncPattern, рабочий поток может вернуться в пул и обслуживать другие запросы. Исходный запрос «пробуждается» позже в другом рабочем потоке, когда доступ к БД завершен, и остальная часть работы выполнена (клиент службы просто терпеливо ждет - все это прозрачно, если вы не используете клиент с поддержкой AsyncPattern и обязательна). Это МОЖЕТ позволить вашему сервису обрабатывать больше запросов, если все сделано аккуратно. Чтобы воспользоваться этим преимуществом, вы должны использовать API на сервере, которые имеют собственные асинхронные реализации. Единственное, что я вижу, что может быть кандидатом, это вызов БД, который происходит в вашем методе SQLHelper.ExecuteDataset - вам нужно прочитать базовый API, чтобы убедиться, что доступна ИСТИННАЯ асинхронная опция (наличие методов BeginXXX / EndXXX не обязательно означает, что это TRUE async impl). Материал System.SqlClient действительно асинхронный.
Слово предостережения: вам придется обрабатывать много запросов, чтобы сделать это стоящим - для того, чтобы разделить вещи таким образом, нужно значительно усложнить сложность кода и читабельность. Вы также должны очень хорошо понимать многопоточное программирование - существуют многочисленные подводные камни, связанные с блокировкой, обработкой ошибок и т. Д., Которые выходят далеко за рамки SO.
Удачи!