I am not trying to beat a dead horse, honestly. And I've read all the advice on thread killing, however, please consider the code. It does the following:
- It starts a thread (via
StartThread
method) - It calls the database looking for anything in the ServiceBroker queue. Note the
WAITFOR
command - it means that it will sit there until there is something in the queue. All this inMonitorQueue
method. Kill the thread. I tried
.Interrupt
- it seems to do absolutely nothing. Then I tried.Abort
, which should never be used, but even that did nothing.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(); }
Is it actually possible to kill a thread?
See Question&Answers more detail:os