Что вы делаете сейчас с незавершенным звонком, когда клиент закрывает приложение? Вы можете сделать то же самое с асинхронным вызовом.
Да, асинхронный режим - это путь для длительных запросов. Если набор результатов достаточно большой, вы можете даже подумать об отправке его с несколькими ответами с сервера.
Когда пользователь нажимает кнопку Отмена, вы отправляете на сервер новое сообщение о том, что вы больше не заинтересованы в результатах. Если запрос SQL выполняется в пуле потоков, вы не можете отменить его.