次のコード スニペットが正しい方法であるかどうか疑問に思っていました。
Logger.Debug("Check file exists for corresponding path: {0}.", filePath);
var timeDeadline = DateTime.Today + Settings.Default.FileDeadline; //Timespan type
while (!File.Exists(filePath))
{
if (DateTime.Now > timeDeadline)
Logger.Error("The file is not available: {0}.", filePath);
Logger.Info("The file is not yet available. Waiting for 1 hour...");
Thread.Sleep(TimeSpan.FromHours(1));
}
このコードの目的は、Windows タスク スケジューラを使用して早朝にスケジュールを設定し、通常は 9:00 頃に到着するファイルをロードすることですが、数時間の遅延が発生する可能性があり、最終的には 14:30 (FileDeadline) より前にロードする必要があります。それでも見つからない場合は、見つからないファイルをエラーとして報告します。
また、1 時間おきに例外をスローし、Windows タスクが 1 時間ごとにプロセスを再起動できるようにすることもできますが、C# にプロセスのすべての制御を任せる方がよいと考えました。欠点は、スレッドが 1 時間スリープし、スケジュールされたタスクが何時間も実行されることです。使用されるリソースがごくわずかであるかどうかは気にしませんが、より経験豊富なプログラマーには、より洗練されたソリューションがあるかもしれません。