Ich fürchte, ich kenne bereits die Antwort. Ich habe eine Klasse, die Serviceaufrufe und Caching abwickelt. Um mehrere Anrufe an den Dienst mit derselben Anfrage zu vermeiden, kann ich natürlich eine Sperre um den Codeblock verwenden, aber viele dieser Methoden haben unterschiedliche Argumente, die den Cache-Schlüssel bilden. Es ist eine Schande, darauf zu warten, dass ein Sperrcodeblock ausgeführt wird, wenn es sich um einen komplett anderen Cacheschlüssel (oder mehrere verschiedene Cacheschlüssel) handeln könnte.C# zu sperren oder nicht zu sperren
Ich weiß, ich könnte eine Sperre für die Cache-Schlüssel-String selbst, aber dies ist ein No-No gegeben, dass diese Zeichenfolge möglicherweise überall auftauchen könnte.
So kann ich entweder potenziell unnötige Anrufe an den Dienst ohne die Sperre führen ODER potenziell unnötige Verzögerungen innerhalb der Methode hinzufügen, indem ich auf die Sperre warte.
Sind das meine meine 2 Optionen oder gibt es noch eine?
Prost
"Um mehrere Anrufe an den Dienst mit der gleichen Anfrage zu vermeiden, kann ich natürlich eine Sperre verwenden" - das klingt weniger als korrekt. Eine Sperre (System.Threading.Monitor.Enter/Exit) wird verwendet, um einen Codeblock zu markieren, der ausschließlich von einem einzelnen Thread nur für eine bestimmte Sperre ausgeführt wird. Es wird nicht auf magische Weise wiederholte Anrufe verschwinden lassen. Bitte poste einen Code, auf den die Antwort basieren könnte. – Tar
@ default.kramer Sie könnten das tun, aber Sie müssten ein Wörterbuch dieser Objekte oder etwas ähnliches haben, so dass Sie es wieder mit einer anderen Zeichenfolge finden könnten. Sie müssen auch darauf achten, dass Ihre Logik zum Bestimmen, was Sie sperren müssen, nicht mehr Zeit und Aufwand erfordert als das Sperren von allem (was natürlich von den spezifischen Anwendungsfällen abhängt). – Servy