我想为 Web 数据处理组合一个调度程序以限制作业数量,因此我使用了 Quartz.Net 框架并将其放在 IHttpAsyncHandler 之上。
public void ProcessRequest(HttpContext context)
{
// StdSchedulerFactory.GetDefaultScheduler().Start(); etc
Global.scheduler.start();
// IJobDetail job = JobBuilder.Create<T>().WithIdentity(jobId, "Processing").Build(); etc
Global.scheduler.AddProcessingJob<JobRxFormulas>(user, app, arguments);
}
我已经通过参数将 HttpContext 传递给作业,这工作正常,但是当我想获取 context.Session 时它为空 - 这是有道理的,因为我将处理作业添加到它自己的队列中并且 HttpAsyncHandler 进程已经完成。我没有尝试过,但我认为返回结果也会因为同样的原因而失败:
context.Response.Write(json);
我的一个想法是我可以声明一个锁并将这个循环添加到 ProcessRequest:
while (lock);
但不确定这是最好的主意。
如何最好地保持处理程序的 HttpContext 处于活动状态,以便我可以返回结果?或者我什至可以将 Quartz 作业的结果返回给 ProcessRequest(就像 Javascript 中的承诺,即 $.when.then),然后通过 context.Response 将其发送回?
还是完全废弃 Quartz 并让 HttpAsyncHandler 首先进行作业调度会更好?
https://stackoverflow.com/questions/33642861/processing-job-scheduling-with-httpasynchandler