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