Я не пытаюсь в избить dead лошадь, честно. И я прочитал все советы по убийству нитей, однако, пожалуйста, рассмотрите код. Он выполняет следующие действия:
- Он запускает поток (через метод
StartThread
) - Он вызывает базу данных, которая ищет что-либо в очереди ServiceBroker. Обратите внимание на команду
WAITFOR
- это означает, что она будет сидеть там, пока в очереди не появится что-то. Все это в методеMonitorQueue
. -
Убейте нить. Я пробовал
.Interrupt
- он ничего не делает. Затем я попробовал.Abort
, который никогда не должен использоваться, но даже это ничего не делало.Thread thxMonitor = new Thread(MonitorQueue); void StartThread() { thxMonitor.Start(); } void MonitorQueue(object obj) { var conn = new SqlConnection(connString); conn.Open(); var cmd = conn.CreateCommand(); cmd.CommandTimeout = 0; // forever and ever cmd.CommandType = CommandType.Text; cmd.CommandText = "WAITFOR (RECEIVE CONVERT(int, message_body) AS Message FROM SBQ)"; var dataTable = new DataTable(); var da = new SqlDataAdapter(command); da.Fill(dataTable); da.Dispose(); } void KillThreadByAnyMeansNecessary() { thxMonitor.Interrupt(); thxMonitor.Abort(); }
Действительно ли можно убить поток?