Hallo zusammen,
ich bräuchte mal Hilfe beim Locking in einer ASP.NET Funktion. Hier mein Aufbau in abgewandelter Form:
Speichern.aspx
Speichern()
{
Starte Transaction
{
SpeicherBestellung()
{
GeneriereBestellNummer()
}
}
}
Das ganze läuft in einer Transaktion. Die Funktion SpeicherBestellung() ruft die Funktion GeneriereBestellNummer() auf. Eine Bestellnummer kann nur durch eine DB-Abfrage nach bestimmten Kriterien erstellt werden. Anschließend wird die Bestllnummer der Bestellung zugewiesen und die Bestellung wird gespeichert.
Nun können mehere Bestellungen gleichzeitig gespeichert werden und evtl. die gleiche Bestellnummer bekommen.
Wie muss ich das ganze in einer ASP.NET Application locken bzw. ist das so richtig?
Variante 1:
Speichern()
{
Application.Lock();
Starte Transaction
{
SpeicherBestellung()
{
GeneriereBestellNummer()
}
}
Application.UnLock()
}
Variante 2:
private static object thisLock = new object()
Speichern()
{
lock (thisLock)
{
Starte Transaction
{
SpeicherBestellung()
{
GeneriereBestellNummer()
}
}
}
}
Hallo,
also Variante 1 kann ich wohl vergessen da sie nur das Application object lockt. Also müsste Variante 2 funktionieren. Da sich statische Variablen in ASP.NET wie Application Variablen verhalten.
Ich würde variante 3 bevorzugen.
Das .Net Framework liefert dir für solche Probleme aber auch noch nettere Helferlein.
Monitor, Semaphore, usw...
Hallo,
danke fürt die Antwort. Ich glaube ein lock() wird sowieso als Monitor.Enter etc. umgesetzt.