0

我通过简单的代码片段向您展示我的问题。

这是流行的场景。用户在没有缓存时加载我们的页面,因此我们生成一个。在我的代码示例中,这需要 120 秒来保存缓存,在此之前我会修改静态变量。

我的问题是为什么当我在同一时刻多次打开此页面并且缓存为空时静态变量“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;
    }
}
4

1 回答 1

0

i因为您在 PageLoad 上再次声明了一个错误

  protected void Page_Load(object sender, EventArgs e)
    {
        int i; // <----- here, this is probably bug and you must remove this line

您还需要某种锁定以避免同时进行多个调用,即使您暂时通过页面会话的锁定来保存。

于 2013-08-31T16:32:08.343 回答