C# - Web alkalmazás zárolása

forráskód letöltése
ASP.NET-es web alkalmazásunkat bizonyos műveletek elvégzése előtt érdemes zárolnunk, hogy több egyidejű kérés következtében ne alakulhasson ki olyan helyzet, hogy változóink helytelen értéket kapnának.
Ennek kiküszöbölésére zárolhatjuk az alkalmazásunkat, majd elvégezhetjük a kritikus műveletet és végül feloldhatjuk a zárat.
Zárolást érdemes végezni, ha a Page osztály HttpApplicationState típus Application property-jében tárolt változókhoz kívánunk hozzáférni. Ha például egy számlálót helyezünk itt el, mely minden kérést számlál, akkor a számláló növeléséhez két lépésre lesz szükségünk:
  • a számláló aktuális értékének kiolvasása
  • az érték növelése eggyel és az új érték tárolása.
Ha pont e két lépés között történne egy másik kérés kiszolgálása, melyben ugyanez a funkció fut, akkor a mi folyamatunk felülírná a számláló értékét, mely már módosult a lekérdezés óta.
Ennek megakadályozására lett létrehozva a Lock, Unlock függvény páros, melynek használata egyszerű: a Lock meghívása után az adatokhoz más folyamat nem férhet hozzá az Unlock hívásáig.
  private void Page_Load(object sender, System.EventArgs e)
  {
    Application.Lock();
    try
    {
      i = (int)Application["counter"];
      Application["counter"] = ++i;
    }
    catch
    {
      Application.Add("counter", 1);
      i = 1;
    }
    Application.UnLock();
  }