如何:在检查不可用的网络共享时防止超时 - C#
Posted
技术标签:
【中文标题】如何:在检查不可用的网络共享时防止超时 - C#【英文标题】:How To: Prevent Timeout When Inspecting Unavailable Network Share - C# 【发布时间】:2010-10-18 02:47:58 【问题描述】:我们有一些基本的 C# 逻辑可以遍历目录并返回其中的文件夹和文件。当针对无法访问或无效的网络共享 (\\server\share\folder) 运行时,代码似乎会“挂起”大约 30 秒,然后从调用返回。
我想最终获得一种方法,该方法将尝试从给定路径获取文件夹和文件,但没有超时期。换句话说,完全减少或消除超时。
我已经尝试过一些简单的方法,比如提前验证目录的存在,认为“不可用”的网络驱动器会很快返回 false,但这并没有按预期工作。
System.IO.Directory.Exists(path) //hangs
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(path); //hangs
关于什么可以帮助我实现高效(并希望得到管理)解决方案的任何建议?
【问题讨论】:
任何带有完整源代码示例的最终解决方案? 【参考方案1】:您可以使用此代码:
var task = new Task<bool>(() => var fi = new FileInfo(uri.LocalPath); return fi.Exists; );
task.Start();
return task.Wait(100) && task.Result;
【讨论】:
+1 来自我,这对文件来说非常有用,但用它来回答原始问题是没用的。要回答这个问题,请尝试将new FileInfo(uri.LocalPath)
替换为 new DirectoryInfo(strPath)
以检查目录而不是文件。
***这应该是答案*** OP pls chng【参考方案2】:
把它放在它自己的线程上,如果它在一定时间内没有回来,继续前进。
【讨论】:
【参考方案3】:也许您可以先尝试 ping 服务器,然后在收到响应时才询问目录信息?
【讨论】:
我已经成功地使用它来遍历我们的机器网络,寻找软件。但是,从 UNC 路径中解析出服务器可能并不可行。【参考方案4】:看...
Faster DirectoryExists function?
...为 Directory.Exists 设置执行时间的方法
【讨论】:
以上是关于如何:在检查不可用的网络共享时防止超时 - C#的主要内容,如果未能解决你的问题,请参考以下文章