C# 如何等待文件数秒

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

如何等待一个文件90秒,如果它没有在90秒内创建,我们应该超时并退出该函数。如果它在90秒内创建,它应该返回为true

我失败地执行了以下代码

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
(可以配置为在超时后自动取消)实现异步超时。异步方法并不是绝对必要的,但更好,它可以避免阻塞任何重要的线程。