Как правильно ожидать завершения SQL запроса?

Есть простой SQL запрос, который очень долго выполняется. Если запустить приложение, то возникает исключение:

System.ComponentModel.Win32Exception (0x80004005): Время ожидания операции истекло

В случае же если пошагово отладчиком проходить или поставить задержку потока то ошибка исчезает.

Как это сделать не костылём, а по-человечески?

Используй async/await. По сути то же ожидание, но в отдельном потоке. Так будет правильнее