我想知道是否有办法克服这种情况:
我有一个带有静态变量的静态类,比如说
static string[] Cities = GetCities();
并GetCities
从一个数据库中获取所有城市。问题是我收到一个错误,GetCities
因为数据服务器有时不可用,即使服务器再次可用,这个错误也不会消失。
我认为这是因为变量 Cities 只创建一次......
我认为这是因为变量 Cities 仅创建一次
这是正确的:只有一次调用GetCities()
; 如果失败,将不会有其他调用。要解决此问题,请更改Cities
为只读属性,并缓存获得结果GetCities()
时的结果。
static string[] cachedCities = null;
public static string[] Cities {
get {
return cachedCities ?? (cachedCities = GetCities());
}
}
您真的不应该在初始化类型时进行数据库访问。
考虑为您的数据库查询引入缓存机制。
静态初始化每个类只发生一次。当静态初始化期间发生异常时,CLR 会存储该异常。该类的未来使用将自动重新抛出相同的异常,而不是触发任何重新初始化。您无法更改此行为。