我通过简单的代码段向您展示我的问题。
这是一种流行的场景。用户在没有缓存时加载我们的页面,所以我们生成一个。在我的代码示例中,这需要120秒来保存缓存,并在此之前使用静态变量。
我的qustion是为什么当我在同一时刻多次打开此页面并且缓存为空时,静态变量“i”不会增加。
public partial class _Default : Page
{
static int i = 0;
protected void Page_Load(object sender, EventArgs e)
{
int i;
var cache = Cache.Get("cache") as string;
if (string.IsNullOrEmpty(cache))
{
i = GenerateCache();
}
else
{
i = Convert.ToInt32(cache);
}
Response.Write(i.ToString());
}
public int GenerateCache()
{
var sw = new Stopwatch();
sw.Start();
++i;
Response.Write(i+"<br>");
while (sw.ElapsedMilliseconds < 1000 * 120) { }
Cache.Insert("cache", i.ToString());
return i;
}
}
答案 0 :(得分:0)
因为您在PageLoad
上再次声明i
时有错误
protected void Page_Load(object sender, EventArgs e)
{
int i; // <----- here, this is probably bug and you must remove this line
你也需要某种锁定来避免在同一时刻进行多次通话,即使你当前锁定页面会话也是如此。