В настоящее время работает с Oracle, но также потребуется решение для MS SQL.
У меня есть графический интерфейс, который позволяет пользователям генерировать SQL, который будет выполняться в базе данных. Это может занять очень много времени, в зависимости от поиска, который они генерируют. Я хочу, чтобы GUI / приложение реагировало во время этого поиска, и я хочу, чтобы пользователь мог отменить поиск.
Я использую фоновый рабочий поток.
Моя проблема в том, что, когда пользователь отменяет поиск, я не могу прервать звонок в базу данных. Он ожидает завершения и может опрашивать свойство CancelationPending. Это не только тратит ресурсы базы данных, но и создает проблемы для моего кода.
Если пользователь нажимает «Поиск» по очень длинному запросу, затем нажимает «Отмена», а затем снова «Поиск» - первый поиск все еще выполняется в базе данных. Фоновый работник все еще занят, когда снова нажимает кнопку поиска. Единственное решение, которое у меня есть для решения этой проблемы, - сделать нового фонового работника.
Кажется, это очень уродливый способ делать вещи. База данных продолжает работать, я создаю новые экземпляры фоновых рабочих .... когда я действительно хочу ОСТАНОВИТЬ вызов базы данных и повторно использовать того же самого рабочего.
Как я могу это сделать?