使用寿命计时器限制线程

时间:2015-10-07 22:20:37

标签: multithreading throttling

我正在设置一个作业队列服务,需要限制线程并限制线程中运行的作业的生命周期,而不是线程生命本身。关于Thread.Abort()有多糟糕,请不要使用肥皂盒。我已经彻底考虑了两种罪恶的后果,在我看来,这是更好的选择。 Abort()实际上可能永远不会被调用,但如果每次都调用,则需要它。 我可以使用以下代码获得限制和线程生命时间,但是计时器启动,即使然后作业正在等待启动,因为已超出限制阈值。有没有办法让我只能在作业开始时启动计时器,而不仅仅是线程?

谢谢

厄尔

            var workerThread = new Thread(() =>
            {
                concurrencySemaphore.Wait();
                try
                {

                    consumerHelper.Execute(job, JobMessage, communicate);;
                }
                finally
                {

                    concurrencySemaphore.Release();
                }

            });

            var timeoutTimer = new System.Threading.Timer((s) =>
            {
                workerThread.Abort();
            }, null, jobTimeSpan, TimeSpan.FromHours(12));

            workerThread.Start();

我需要的是在作业实际开始运行时启动的计时器,而不仅仅是在线程开始运行时。

1 个答案:

答案 0 :(得分:1)

我想出来了。我创建了一个自定义事件处理程序,并在启动作业之前将其传递给它。在事件处理程序中,我启动了计时器。就像一个魅力。