Как: предотвратить тайм-аут при проверке недоступного сетевого ресурса - C # - PullRequest
15 голосов
/ 07 апреля 2009

У нас есть некоторая базовая логика C #, которая перебирает каталог и возвращает папки и файлы внутри. При запуске с сетевым ресурсом (\\ server \ share \ folder), который недоступен или недействителен, кажется, что код «зависает» примерно на 30 секунд, прежде чем вернуться обратно из вызова.

Я бы хотел закончить с методом, который будет пытаться получить папки и файлы по указанному пути, но без периода ожидания . Другими словами, чтобы уменьшить или полностью исключить время ожидания.

Я пробовал что-то столь же простое, как заблаговременно проверить существование каталога, думая, что «недоступный» сетевой диск быстро вернет false, но это не сработало, как ожидалось.

System.IO.Directory.Exists(path) //hangs 

System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs

Любые предложения о том, что может помочь мне найти эффективное (и, надеюсь, управляемое) решение?

Ответы [ 4 ]

20 голосов
/ 18 августа 2011

Вы можете использовать этот код:

var task = new Task<bool>(() => { var fi = new FileInfo(uri.LocalPath); return fi.Exists; });
task.Start();

return task.Wait(100) && task.Result;
7 голосов
/ 07 апреля 2009

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

1 голос
/ 07 апреля 2009

Возможно, вы могли бы сначала попробовать проверить связь с сервером и запросить информацию о каталоге, только если получили ответ?

0 голосов
/ 17 ноября 2010

См ...

Более быстрая функция DirectoryExists?

... для установки времени выполнения для Directory.Exists

...