2009-04-07 3 views
14

Abbiamo una logica C# di base che scorre su una directory e restituisce le cartelle ei file all'interno. Quando viene eseguito su una condivisione di rete (\\ server \ condivisione \ cartella) inaccessibile o non valida, il codice sembra "sospeso" per circa 30 secondi prima di tornare dalla chiamata.Procedura: evitare il timeout durante l'ispezione della condivisione di rete non disponibile - C#

Mi piacerebbe finire con un metodo che tenterà di ottenere cartelle e file dal percorso specificato, ma senza il timeout periodo. In altre parole, per ridurre o eliminare del tutto il timeout.

Ho provato qualcosa di semplice come convalidare l'esistenza della directory prima del tempo pensando che un'unità di rete 'non disponibile' avrebbe restituito rapidamente false, ma non funzionava come previsto.

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

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

Qualche suggerimento su cosa può aiutarmi a ottenere una soluzione efficiente (e sperabilmente gestita)?

+0

qualsiasi finale soluzione con un esempio di codice sorgente completo a lavorare su di esso? – Kiquenet

risposta

6

Posizionarlo su una propria filettatura, se non ritorna in un determinato periodo di tempo, andare avanti.

1

Forse potresti provare a eseguire il ping del server e chiedere solo le informazioni sulla directory se ricevi una risposta?

+0

L'ho usato con successo per camminare sulla nostra rete di macchine, alla ricerca di software. Tuttavia, potrebbe non essere possibile analizzare il server dal percorso UNC. –

16

È possibile utilizzare questo codice:

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

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

+1 da parte mia, questo è ottimo per i file ma l'utilizzo di questo per rispondere alla domanda originale è inutile. Per rispondere alla domanda, prova a sostituire 'new FileInfo (uri.LocalPath)' con 'new DirectoryInfo (strPath)' per controllare le directory invece dei file. –

+1

*** questa dovrebbe essere la risposta *** OP pls chng –