Подтвердить что ты не робот

Как: Предотвращение таймаута при проверке недоступности сети - С#

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

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

return task.Wait(100) && task.Result;

Ответ 3

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