0

我想为 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

4

0 回答 0