我正在设置一个作业队列服务,需要限制线程并限制线程中运行的作业的生命周期,而不是线程生命本身。关于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();
我需要的是在作业实际开始运行时启动的计时器,而不仅仅是在线程开始运行时。
答案 0 :(得分:1)
我想出来了。我创建了一个自定义事件处理程序,并在启动作业之前将其传递给它。在事件处理程序中,我启动了计时器。就像一个魅力。