проверьте, существует ли сетевой диск с таймаутом в c # - PullRequest
3 голосов
/ 18 января 2011

Я создал службу Windows, которая перемещает файлы между жестким диском сервера (на котором установлена ​​служба) и сетевым диском, сопоставленным с сервером.одна из проблем, с которой я столкнулся при создании решения, была проблема с сетью.

как проверить, существует ли сетевой диск при установке тайм-аута при его проверке?Если время истекло, я перехватываю исключение и повторяю через X минут и оставляю элементы в очереди.

спасибо!

Ответы [ 2 ]

7 голосов
/ 18 января 2011

Поместите вызов в отдельный поток и закройте поток после определенного времени ожидания. Следующая ссылка реализует логику тайм-аута для метода:

http://kossovsky.net/index.php/2009/07/csharp-how-to-limit-method-execution-time/

EDIT

В одном из комментариев к вышеприведенной теме предлагается лучшая реализация с использованием .NET Async Pattern:

public static T SafeLimex<T>(Func<T> F, int Timeout, out bool Completed)   
   {
       var iar = F.BeginInvoke(null, new object());
       if (iar.AsyncWaitHandle.WaitOne(Timeout))
       {
           Completed = true;
           return F.EndInvoke(iar);
       }
         F.EndInvoke(iar);
         Completed = false;
       return default(T);
   } 
0 голосов
/ 18 января 2011

Насколько я помню, обычные методы System.IO делают свое дело.Таким образом, в этом случае вы просто используете:

if (Directory.Exists("Z:\\MyNetworkFolder"))
{
    // Gogogo
}
else
{
    Thread.Sleep(MyTimeout);
}

Если папка не существует, сделайте паузу для любого времени ожидания, которое вы выберете.Это должно сделать работу отлично.

...