我有一个轮询服务,以不同的间隔执行作业。这些作业中的每一个都是一个执行不同操作的外部程序集,但它们都有一个通用接口,允许我在每次需要执行作业时调用以下内容
在调试我的服务时,我同步调用RunJob但是当作为服务运行时,我通过将它添加到线程池来异步调用该作业。
由于作业可能很长,因此对我来说,确保当前正在运行时,如果同一工作的计时器间隔已经过去,我不会再次调用相同的作业。
每个作业都分配了一个uniqueId,因此我很容易识别存储在字典中的特定作业信息,我所拥有的是这样的:
this.PollingJobs[currentJob.JobId].ElaspedTime = 0;
this.PollingJobs[currentJob.JobId].IsProcessing = false;
等...
我在启动特定作业之前将IsProcessing属性设置为true,并且在允许它再次运行之前,我始终确保IsProcessing为false,但是如果仅在添加到的特定作业时将此属性重置为false线程池已完成。
感谢。