ここではジョブサーバーが必要で、現在Quartz.netで遊んでいますが、自分で作成するというアイデアは魅力的です。少なくとも、Quartz.netが裏で何をしているのかを理解することは、Quartz.netをより効果的に使用するという私の理解/チャンスを損なうことはありません。
だから私の質問は、ポーリングなしでスレッドでジョブを取得して起動する方法についてです。解雇する必要のあるジョブがないか「ジョブストア」を2分ごとにチェックすると、約2分の遅延が発生する可能性があります。ポーリング時間を短縮すると、ジョブストアの負担が増大しますが、それでも実際の開始時刻は取得されません。次の2分間のセグメントでジョブをプリロードし、残りの時間スレッドをスリープ状態にして、適切な時間にスレッドを開始することができますが、ポーリング時間が長い場合(削除、再スケジュールなど)、それは厄介で問題が発生しやすいようです。クォーツを分析してそれがどのように行われるかを理解しましたが、基本的な何かが欠けているのではないかと思いました。
編集:
最初に説明したKevinのようなスレッド構造は、ジョブサーバーを実行する方法のようです。最小限のオーバーヘッドで最大限の柔軟性を提供します。スレッドはほとんどの人が(たぶん私だけで)作業するのに非常に重要なので、より単純なポーリングの例では、柔軟性が失われ、オーバーヘッドが増えるという犠牲を払って、ケースの90%で作業が完了します。
反対に、単一のジョブが実行されてシングルスレッド化されていない限り、とにかくスレッド化を処理する必要があります。完全なイノシシに行き、信号を理解することもできます。
また、ポーリングデータベースの例で無料で入手できると主張しているものは実際には無料ではないというKevinにも同意します。スレッド化/待機中のアプリの場合と同じようにコーディングします。ポーリングデータベースのジョブサーバーがジョブの途中で爆発した場合はどうなりますか?どちらも、災害が発生した場合に状態を追跡するために、耐久性のあるストレージに依存しています。
'jobstore'を抽象化のレベルに移動し、それが通常のACID(正しい用語?)データベースに基づいていない場合はどうなりますか?今、あなたの「無料」のものの多くが基づいていたと私が信じているものは、もはや利用できません(トランザクション?)。