我正在开发一项Windows服务,它需要在调用其中一个Web服务时安排任务。在最坏的情况下,这可能每秒发生数百次。任务需要等待一段时间,通常是一两分钟,然后调用传递参数的方法。
我们尝试构建自己的调度程序类来执行此操作:
public void ScheduleTask<T>(TimeSpan delay, Action<T> task, T arg)
{
Thread.Sleep(delay);
threadPool.ExecuteAsync(task, arg);
}
但是我们认为这不合适,因为理论上我们最终可能会有数百个线程池线程等待。我的印象是,可用的线程池线程数量有限,这可能会锁定系统。
然后我转向Quartz.NET并在their features page上阅读:
Job类实例可以由Quartz.NET实例化,也可以由应用程序框架实例化。
并且在page 3 of their tutorial上,Scheduler创建了Job类的实例(不是你),因此:
在作业类上定义数据成员是没有意义的,因为每次作业执行时它们的值都会被“清除”。
随意对我大喊大叫,但如何在执行之前获取对Job类实例的引用,以便我可以在其上设置属性?
答案 0 :(得分:1)
我不明白你的用例是什么以及为什么你需要在工作中设置一个属性,但要回答你的问题:要在你的工作执行之前访问你的工作,你需要创建一个工作监听器(实现IJobListener)。在作业执行之前调用作业侦听器,因此您可以在该点设置属性。
一些链接: The documentation on job listeners
我写了一篇博文,详细介绍了听众的创作,here。