我正在开发一项 Windows 服务,该服务需要在调用其中一个 Web 服务时安排任务。在最坏的情况下,这可能每秒发生数百次。任务需要等待一段时间,一般是一两分钟,然后调用传递参数的方法。
我们尝试构建自己的调度程序类来做到这一点:
public void ScheduleTask<T>(TimeSpan delay, Action<T> task, T arg)
{
Thread.Sleep(delay);
threadPool.ExecuteAsync(task, arg);
}
但我们认为这不合适,因为理论上我们最终可能会有数百个线程池线程都在等待。我的印象是可用的线程池线程数量有限,这可能会锁定系统。
然后我转向 Quartz.NET 并在他们的功能页面上阅读:
作业类实例可以由 Quartz.NET 或应用程序的框架实例化。
在他们教程的第 3 页上,调度程序创建了您的作业类(不是您)的实例,因此:
在作业类上定义数据成员是没有意义的,因为每次作业执行时它们的值都会被“清除”。
随意对我大喊大叫,但是我如何在 Job 类实例执行之前获得对它的引用,以便我可以在其上设置属性?
- 该属性正在执行参数的工作,因此在作业执行后我对它不感兴趣。
- 我还想尽量减少实现这一目标所需的对象数量,以保持我的代码简洁明了。
- 最后,我非常不喜欢使用字典,因此更愿意避免使用 JobDataMap 对象。