如何:在检查不可用的网络共享时防止超时 - 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#的主要内容,如果未能解决你的问题,请参考以下文章

如何防止共享主机上的 IIS 应用程序池中的空闲超时

如何检查 C# 中的库 (dll) 是不是可用?

使用 JSOUP java 抓取数据时如何防止死超时?

加快非现有网络共享的 File.Exists

如何在C#中检查我的互联网是不是超时[重复]

nas请求网络超时,错误2001