たとえば、毎週月曜日にアクティブ化する何かを実行するために、繰り返し機能を実装したいと思います。
サーバーで継続的に実行される Window Forms アプリケーションでこれをプログラムで行う方法は何ですか?
遅延についてはよく知っていますが、1 週間または 1 か月にわたる遅延は実装していません。
たとえば、毎週月曜日にアクティブ化する何かを実行するために、繰り返し機能を実装したいと思います。
サーバーで継続的に実行される Window Forms アプリケーションでこれをプログラムで行う方法は何ですか?
遅延についてはよく知っていますが、1 週間または 1 か月にわたる遅延は実装していません。
私の意見では、この機能をコンソール アプリに記述し、スケジュールされたタスク (または SQL スケジューラ、またはお気に入りのスケジューリング ツール) を使用してサーバー上にタスクを作成し、必要な間隔で実行することをお勧めします。
特定の時間に実行されるコード内の「隠し」タスクがアプリに含まれているのを見るのは好きではありません。通知なしで失敗する機会が多すぎます。
スケジュール ツールを使用すると、ソース コードに触れることなくスケジュールを表示/変更できます。
補足として、Windows フォーム アプリはサーバーではなくクライアントで実行する必要があります。
とにかくアプリがすでに実行されている場合、私がすることは、毎週のタスクを実行するかどうかを確認する定期的なタスクを作成することです
ロジックを示すための疑似コードを次に示します。
if(today is Monday && i didn't do this task yet today)
{
//do monday stuff
}
理想的には、Windows のスケジュールされたタスクの下でこの操作を実行する必要があります。その後、再発とタイミングを処理します。
winforms アプリケーションを介してこれを行う必要がある場合は、2 つのオプションがあります - 定期的な時間ポーリングまたは待機/スリープのブロックです。
定期的なタイム ポーリングでは、アプリケーションを実行する必要がある時間間隔を設定します。次に、この期間が経過したかどうかをループで確認し、アクションを実行します。必要なレベルの精度をループ側で設定できます。
ブロッキング待機では、実行する時間になるまで実行中のスレッドをスリープさせます。このアプローチの唯一の問題は、サーバーが再起動した場合、アプリケーションがその状態を回復し、スリープ操作を再開する必要があることです。このアプローチの精度は数秒以内です (サーバーの時間のずれによって異なります)。