如何:检查不可用的网络共享时防止超时 - C#

时间:2009-04-07 16:43:41

标签: c# windows networking filesystems

我们有一些基本的C#逻辑,它遍历目录并返回其中的文件夹和文件。当针对无法访问或无效的网络共享(\\ server \ share \ folder)运行时,代码似乎“挂起”大约30秒,然后再从呼叫返回。

我想最终得到一种方法,它会尝试从给定路径获取文件夹和文件,但没有超时期间。换句话说,完全减少或消除超时。

我尝试过一些简单的事情,就像提前验证目录的存在一样简单,认为“不可用”的网络驱动器会很快返回false,但是没有按预期工作。

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

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

有什么建议可以帮助我实现有效(并且希望管理)的解决方案?

4 个答案:

答案 0 :(得分:20)

您可以使用此代码:

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

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

答案 1 :(得分:7)

将它放在自己的线程上,如果它在一定时间内没有回来,继续前进。

答案 2 :(得分:1)

也许您可以先尝试ping服务器,只有在收到回复时才询问目录信息?

答案 3 :(得分:0)

请参阅...

Faster DirectoryExists function?

...用于设置Directory.Exists

的执行时间的方法