我有一个简单的任务:要从服务器读取数据,如果服务器无法访问(服务器故障或网络故障),请从本地磁盘缓存中加载数据(可能是过时的)。

这是Java代码的简单伪表示形式:

try {
    //read from server
} catch (IOException ioe) {
    //most likely a socket timeout exception

    //read from local disk
} finally {
    //free I/O resources
}


但是在C#中实现它似乎不起作用,因为即使主机上没有Internet访问,WebClient似乎也不会引发任何异常,因此无法通过catch块检测到该情况并恢复为本地缓存。
我知道WebClient的异步API及其相当有趣的回调链,但是我认为这太尴尬,不适合我的设计目标。有没有一种方法可以像上面显示的Java框架代码一样轻松地在C#中做到这一点?谢谢。

最佳答案

WebClient将超时,但仅在100s之后。

我建议您改用HttpWebRequest。这具有可设置的超时属性。

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspx

09-06 01:46