Ответ 1
Поместите его в свой собственный поток, если он не вернется через определенное время, перейдите к нему.
У нас есть базовая логика С#, которая выполняет итерацию по каталогу и возвращает папки и файлы внутри. При запуске с сетевым ресурсом (\\ server\share\folder), который недоступен или недействителен, код, кажется, "зависает" около 30 секунд, прежде чем возвращаться от вызова.
Я хотел бы получить метод, который будет пытаться получить папки и файлы из заданного пути, но без периода ожидания. Другими словами, чтобы уменьшить или полностью исключить тайм-аут.
Я пробовал что-то столь же простое, как проверять существование каталога заблаговременно, думая, что сетевой диск "недоступен" быстро вернет false, но это не сработало, как ожидалось.
System.IO.Directory.Exists(path) //hangs
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs
Любые предложения о том, что может помочь мне достичь эффективного (и, надеюсь, управляемого) решения?
Поместите его в свой собственный поток, если он не вернется через определенное время, перейдите к нему.
Вы можете использовать этот код:
var task = new Task<bool>(() => { var fi = new FileInfo(uri.LocalPath); return fi.Exists; });
task.Start();
return task.Wait(100) && task.Result;
Возможно, вы могли сначала попробовать выполнить ping-сервер, и только спросите информацию о каталоге, если вы получите ответ?
См...
Функция Faster DirectoryExists?
... для способа установки времени выполнения для Directory.Exists