Frage

Ich habe gerade einen Artikel gelesen, der beschreibt, wie httpapplicationState hat AcquireRead() / AcquireWrite() Funktionen zur Verwaltung des gleichzeitigen Zugriffs. Es erklärt weiter Lock() und Unlock() auf dem Anwendungsobjekt, um eine Rennbedingung zu vermeiden.

Ich kann nicht verstehen, warum eine Rennbedingung für den Anwendungszustand vorhanden sein sollte, wenn der gleichzeitige Zugang implizit vom Objekt behandelt wird.

Könnte mir das bitte jemand erklären? Warum sollte ich jemals benutzen müssen? Application.Lock() und Application.Unlock() ? Danke !

War es hilfreich?

Lösung

Die Acquireread- und AcquireWrite -Methoden befinden sich in der internen httpapplicationStatelock -Klasse, sodass Sie sie selbst nicht selbst verwenden. Sie synchronisieren den Zugriff, aber nur für ein einzelnes Lesen oder Schreiben. Aus Ihrem Code verwenden Sie die Sperren- und Entsperrenmethoden, wenn Sie den Zugriff synchronisieren müssen.

Sie müssen normalerweise den Zugriff synchronisieren, wenn Sie etwas ändern, das nicht ein einzelnes Lesen oder Schreiben ist, z.

Application.Lock()
if (Application["info"] == null) {
   Application.Add("info", FetchInfoFromDatabase());
}
Application.Unlock();

Andere Tipps

HttpapplicationState - wo die global zuzugreifenvariablen für alle sichtbar sind

Benutzer, die die Anwendung verwenden. Um den Rennbeding zu vermeiden, während sie sich ändern

Der Wert der Variablen. Wir brauchen einige Vorsichtsmaßnahmen, deshalb verwenden wir

Application.lock () und nach der Aufgabe erledigt die gleiche Variable für andere in der

Warteschlange mit Application.unlock ()

Application.Lock()
Application("VisitorCount") = Convert.ToInt32(Application("VisitorCount")) + 1
Application.UnLock()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top