c# - 正确等待每小时轮询加载文件直到某个时间

标签 c# file-upload scheduled-tasks polling thread-sleep

我想知道以下代码片段是否是正确的方法:

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 )当我将丢失的文件报告为错误(如果仍然丢失)时。

我也可以每小时抛出一个异常,并允许 Windows 任务每小时重新启动该进程,但我认为最好让 C# 拥有该进程的所有控制权。缺点是线程休眠一小时并有计划任务运行数小时。我不介意所使用的资源是否可以忽略不计,但我认为一些更有经验的程序员可能有更优雅的解决方案。

最佳答案

Thread.Sleep 是一个坏主意,使用计时器(System.Timers)来完成这项工作。 请参阅http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx有关Timer类的信息

关于c# - 正确等待每小时轮询加载文件直到某个时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18142637/

相关文章:

html - 如何使用html将文件上传到我的服务器

java - 如何触发关闭 Guava AbstractScheduledService?

python - request.urlretrieve 在 PythonAnywhere 中作为计划任务运行时失败

macos - 我可以在 OSX 中使用 iOS 的本地推送通知吗

c# - 如何获取当前正在运行的应用程序列表?

python - Python 中的文件共享站点

ruby - 如何通过 ActiveResource/REST API 将文件上传到 Redmine?

c# - 更改 DataGridView 中特定单元格的前景色

c# - 如何使用 C# 还原 SQL Server 数据库,即使它正在使用中

c# - Automapper 忽略只读属性