ジョブの数を制限する 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 を取得したい場合は null です。これは、処理ジョブを独自のキューに追加し、HttpAsyncHandler プロセスが終了したため意味があります。私は試していませんが、結果を返すことも同じ理由で失敗すると思います:
context.Response.Write(json);
私が持っている 1 つのアイデアは、ロックを宣言して、このループを ProcessRequest に追加できるということです。
while (lock);
しかし、これが最良のアイデアであるかどうかはわかりません。
結果を返すことができるように、ハンドラーの HttpContext を維持するにはどうすればよいですか? または、Quartz ジョブからの結果を ProcessRequest に戻し (Javascript の promise のように、つまり $.when.then)、context.Response を介して送り返すこともできますか?
それとも、Quartz を完全に破棄して、最初に HttpAsyncHandler にジョブのスケジューリングを任せたほうがよいのでしょうか?
https://stackoverflow.com/questions/33642861/processing-job-scheduling-with-httpasynchandler