Comment: empêcher le délai d’expiration lors de l’inspection d’un partage réseau non disponible – C #

Nous avons une logique de base C # qui parcourt un répertoire et renvoie les dossiers et les fichiers. Lorsqu’il est exécuté sur un partage réseau (dossier \\ server \ share \) inaccessible ou non valide, le code semble “se bloquer” pendant environ 30 secondes avant de revenir de l’appel.

Je voudrais finir avec une méthode qui tentera d’obtenir des dossiers et des fichiers à partir du chemin donné, mais sans le délai d’attente . En d’autres termes, réduire ou éliminer complètement le délai d’attente.

J’ai essayé quelque chose d’aussi simple que de valider l’existence du répertoire en pensant qu’un lecteur réseau «indisponible» retournerait rapidement faux, mais cela ne fonctionnait pas comme prévu.

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

Des suggestions sur ce qui peut m’aider à trouver une solution efficace (et, espérons-le, gérée)?

Placez-le sur son propre fil, s’il ne revient pas dans un certain laps de temps, continuez.

Vous pouvez utiliser ce code:

 var task = new Task(() => { var fi = new FileInfo(uri.LocalPath); return fi.Exists; }); task.Start(); return task.Wait(100) && task.Result; 

Peut-être que vous pourriez essayer de cingler le serveur en premier, et demander seulement les informations de répertoire si vous obtenez une réponse?

Voir…

Fonction plus rapide DirectoryExists?

… un moyen de définir le temps d’exécution pour Directory.Exists