У меня есть окно отчета, в котором отображаются результаты, полученные из потенциально долго работающей хранимой процедуры оракула.Моя проблема в том, что когда пользователь закрывает окно, соединение с оракулом остается открытым, и потенциально долго работающий отчет не отменяется.
Единственный способ закрыть открытое соединение - это чтобы администраторы БД убили их вручнуюили для пользователя, чтобы выйти из всего приложения.
Я пытался вызвать Close
для соединения из другого потока, но это, кажется, постоянно блокируется.Я также попытался откатить транзакцию, но в ней возникает та же проблема.
Я беспокоюсь, что единственным решением будет выполнение запроса в другом процессе (или, может быть, в домене приложения?).
Вполне вероятно, что я упускаю что-то очевидное, любая помощь будет принята с благодарностью.
ПОЖАЛУЙСТА, ПРОЧИТАЙТЕ
Этот вопрос не касается оборачивания моего соединения вusing
заявление.Речь идет о том, как принудительно закрыть соединение оракула, выполняющего запрос, .
Пример:
- Запустить поток, выполняющий запрос
- Где-то спрятать объект соединения
Вызов закрыть объект соединения
public void Go()
{
OracleConnection connection;
var queryThread = new Thread(
() =>
{
using (connection = OpenOracleConnection())
{
// execute stored proc that takes 45 mins
// raise an event with the data set we load
}
});
Thread.Sleep(3000); // give it time to be useless
var closeThread = new Thread(
() =>
{
connection.Close();
});
closeThread.Start();
}
Проблема в том, что вместо этого соединение не закрываетсявызов connection.Close () блокирует ожидание выполнения процедуры.