C#线程是否在Oracle数据库会话中挂起杀死?

时间:2019-05-15 10:50:14

标签: c# multithreading oracle

我正在使用C#Windows服务。我用10秒启动了Timer。

  1. 每10秒钟调用一次该方法,该方法仅在线程为null或处于挂起状态(在启动该线程并在该线程内部)时才执行,它调用oracle db proc。

  2. 但是当db在1或2小时后没有响应时。线程自动进入暂停状态。

  3. 此线程方法具有catch..finally块,该块永远不会执行。在内部,最后我检查了线程是否仍处于活动状态,如果是,则将其挂起。 但令人惊讶的是,它从不执行,但再次在不重新启动服务的情况下重新启动了线程。 有帮助吗?

        private void objTimer_Elapsed(object sender, EventArgs e)
        {
            if ((_objThread == null) || (_objThread.ThreadState == ThreadState.Suspended))
                            {
                                    _objThread = new Thread(DBCallMethod);                                   
                                    _objThread.Start();
                                }
      }



        private void DBCallMethod()
        {
            try
            {
                //DB Called to update the recods.
            }
            catch (Exception ex)
            {
                //log the exception using event log
            }
            finally
            {
                //log the complete state using event log
                if (_objThread.IsAlive)
                {
                    _objThread.Suspend();

                }
            }
        }

0 个答案:

没有答案