2017-08-18 8 views
-2

私はここで概念のアイデアについての議論をもっと求めています。アプリケーション環境で頻繁に必要となるのは、設定されたスケジュール(毎週月曜日の午後3時、曜日の午後6時30分、午後2時の午後など)で特定のタスクを実行できる必要があることです。タスクのスケジュールを処理する

私の環境では、これらのイベントを処理するアプリケーションサーバー上で動作するWindowsサービスを構築しました。現在、1時間に1回有効期限が切れるタイマーを使用し、何かをする必要があるかどうかをチェックします。現在、これらのすべてのイベントは、タスクを実行するために日付/時刻/平日などのハードコードされたチェックを使用しています。今や明らかに、1時間に1回実行されるタイマーでは、イベントが実行されるときの私の解決は、スケジュールされてから1時間後までの任意の時間です。私の現在の仕事では、これは問題ありません。

私がしたいことは、任意にスケジュールされたタスクを、時間通りに解決することができることです。さて、改善された解決策は、タスクを実行する必要があるかどうかを確認するために1分ごとに期限切れになるタイマーを持つという問題にすぎません。しかし、これらのことを任意にスケジュールできる最初の要件はもう少し複雑です。

アプリケーションはSQLデータベースに接続されており、フロントエンドはすべてWebベースのASP.Netアプリケーションに含まれているため、ユーザーインターフェイスの部分は問題ではありません。

少なくとも、SQL Serverエージェントのようなアプリケーションでは、開始日と終了日を持つ繰り返しアイテムを許可するという複雑さのスケジュールを処理できるようにしたいと考えています( (毎日、毎週、毎月)、毎週のスケジューリングのために選択できる特定の平日などがあります。今、明らかに、私は、データベーステーブル内のこれらの要素のそれぞれのフィールドを「last 「実行時間」と「次の実行時間」の列に表示されますが、それは私にとっては非常に非効率的です。

私の具体的な質問は次のとおりです。 スケジュールされたタスクを格納するためのデータベースデータモデル設計のベストプラクティスはありますか?

これらのスケジュールをフロントエンドに保存して、バックエンドで特定のジョブを実行するタイミングがあるかどうかを判断するために使用できる既存の.Netライブラリがありますか?私は確かにそれをブルートフォースすることができますが、それは "ホイールを再作成する"ことなく、重い持ち上げの多くを行うためにそこに何かが存在する必要があります共通の十分な要件のように思えます。

このタイプの要件には、明らかでないかもしれない遭遇した落とし穴がありますか?

答えて

0

SQLエージェントを使用するだけですか?または、Windowsのスケジュールされたタスクを使用してください...考えてもHangfire

あなたは自分自身を書くことからどんな利益を得ますか?

これは、既存のソリューションを活用する必要があると思われるより難しい問題です。毎分ポーリングのあなたの現在の考え方は非常に非効率的で、このようなタイミングを扱うときには微妙なバグがたくさんあります。サービスの代わりにコンソールアプリケーションにジョブを書き込んで、既存のスケジューラから呼び出すだけです。カスタムフロントエンドを維持する場合は、SQL Agent/Scheduled Task/Hangfireインターフェイスを使用してフロントエンドにジョブを作成させることができます。

Windowsサービスは、常にのを実行しているものに適しています。

関連する問題