同步aspx页面加载事件

时间:2014-08-14 13:57:42

标签: c# asp.net synchronization thread-safety thread-synchronization

我只有一个代码ASPX页面,它对数据库数据进行了一些计算。 然后我将我的主机配置为具有计划任务,该任务每天早上6点钟调用该页面一次。但是,由于Web地址上存在别名,因此页面会被调用两次。

如何同步页面加载事件的执行以避免两个线程做同样的事情两次?

线程的总执行时间约为6/7秒。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我的第一个建议是花费更多精力来消除冗余呼叫。也就是说,同步到位仍然是一个好主意,因为无论如何,外部进程可能会多次调用页面。我会推荐类似于我在Locking to load data to cache

中发布的内容

您案例的一个例子:

private static object MyDataLoadLock = new object();

public List<object> MyData
{
    get
    {
        return this.Cache["MyDatabaseCalculations"] as List<object>;
    }
    set
    {
        this.Cache["MyDatabaseCalculations"] = value;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (MyData == null)
    {
        lock (MyDataLoadLock)
        {
            if (MyData == null)
            {
                MyData = GetDatabaseCalculations();
            }
        }
    }
}

private List<object> GetDatabaseCalculations()
{
    System.Threading.Thread.Sleep(6500);
    return new List<object>();
}