如何在控制台应用程序中最好地实现 SetTimeout?

How to best implement a SetTimeout in console app?

我想知道如何在我的控制台应用程序中使用 c# 最好地实现 SetTimeout

我的场景是:

我用soap客户端上传一个csv文件,因为文件太大,返回超时异常。

这很好,因为在这个阶段我希望我的控制台应用程序暂停 15 分钟,然后继续工作,因为我需要等到文件上传完毕。

此外,如果文件在 15 分钟后仍未上传,我想每分钟检查一次以确保文件已上传。

所以关键是有第一个 15 分钟的 SetTimeout(如 javascript)并检查文件是否已上传,否则每分钟检查一次文件是否已上传。

实现这个的最佳方法是什么?

我试过:

private Timer _timer;

_timer.Interval = ((1000 * 60) * 15);
_timer.Elapsed += IntervalElapsed;
_timer.Start();

IntervalElapsed方法如下:

private void IntervalElapsed(object sender, ElapsedEventArgs e){
   _timer.stop();
   // check if file has been uploaded
   var isFileUploaded = HasFileBeenUploaded();

   while(!isFileUploaded ){
      // perform setInterval until file has been uploaded
   }
}

但是我的 IntervalElapsed 方法从未被调用,控制台应用程序关闭。

您可能需要在完成计时器设置后阻止应用程序关闭,也许可以尝试添加

Console.ReadLine();

在您的代码末尾,它将在关闭前等待用户输入。

您可以使用简单的 Sleep 方法代替 Elapsed 方法来实现您的目标

const int MINUTE = 1000 * 60;
static void Main(string[] args)
{
  System.Threading.Thread.Sleep(15 * MINUTE);          
  while(!HasFileBeenUploaded())
  {               
   System.Threading.Thread.Sleep(MINUTE);
  }
}  

--SJ