找出线程池中的工作何时完成

时间:2013-11-21 02:56:38

标签: c# multithreading threadpool

我有一个轮询服务,以不同的间隔执行作业。这些作业中的每一个都是一个执行不同操作的外部程序集,但它们都有一个通用接口,允许我在每次需要执行作业时调用以下内容

  • InitializeJob(初始化服务时调用)
  • RunJob(在该作业的特定时间间隔过去时调用
  • FinalizeJob(服务停止时调用)

在调试我的服务时,我同步调用RunJob但是当作为服务运行时,我通过将它添加到线程池来异步调用该作业。

由于作业可能很长,因此对我来说,确保当前正在运行时,如果同一工作的计时器间隔已经过去,我不会再次调用相同的作业。

每个作业都分配了一个uniqueId,因此我很容易识别存储在字典中的特定作业信息,我所拥有的是这样的:

this.PollingJobs[currentJob.JobId].ElaspedTime = 0;
this.PollingJobs[currentJob.JobId].IsProcessing = false;

等...

我在启动特定作业之前将IsProcessing属性设置为true,并且在允许它再次运行之前,我始终确保IsProcessing为false,但是如果仅在添加到的特定作业时将此属性重置为false线程池已完成。

感谢。

0 个答案:

没有答案