C# 如何等待文件数秒
如何等待一个文件90秒,如果它没有在90秒内创建,我们应该超时并退出该函数。如果它在90秒内创建,它应该返回为true 我失败地执行了以下代码C# 如何等待文件数秒,c#,.net,C#,.net,如何等待一个文件90秒,如果它没有在90秒内创建,我们应该超时并退出该函数。如果它在90秒内创建,它应该返回为true 我失败地执行了以下代码 private bool Wait(string filePath, int maxSecs, ref string errDesc) { System.DateTime timeNow = System.DateTime.Now; bool timeOut = false; try
private bool Wait(string filePath, int maxSecs, ref string errDesc)
{
System.DateTime timeNow = System.DateTime.Now;
bool timeOut = false;
try
{
System.Threading.Thread.Sleep(2000);
if (System.IO.File.Exists(filePath))
return true;
System.DateTime currentdatetime = System.DateTime.Now;
TimeSpan diff = currentdatetime - timeNow;
//timeOut = Math.Abs(DateDiff(DateInterval.Second, timeNow, System.DateTime.Now)) >= maxSecs;
if (timeOut)
{
errDesc = "File creation failed";
return false;
}
System.Threading.Thread.Sleep(2000);
}
catch (Exception ex)
{
errDesc = ex.Message;
}
return timeOut;
}
你可以做一个for循环,等待2秒45次。如果在此期间内创建了文件,则从循环内部返回“true”。在循环之后,您输入了一个“return false”。没有错误。请尝试以下操作:
...
TimeSpan diff = currentdatetime - timeNow;
timeOut = diff.Seconds > maxSecs;
if (timeOut)
...
您需要解决的主要问题是异步检测文件创建。您可以使用
FileSystemWatcher
来执行此操作。请参阅标记的副本。其他部分包括订阅事件以及在调用事件处理程序时设置TaskCompletionSource
值。然后,您可以使用Task.Delay()
或CancellationTokenSource
(可以配置为在超时后自动取消)实现异步超时。异步方法并不是绝对必要的,但更好,它可以避免阻塞任何重要的线程。