Kapitel 14. Szenarien
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
In diesem Kapitel werfen wir einen Blick auf eine Reihe von Typen und Techniken, um einige häufige Szenarien beim Schreiben von nebenläufigen Programmen anzugehen. Diese Arten von Szenarien könnten ein ganzes Buch füllen, deshalb habe ich nur ein paar ausgewählt, die ich für besonders nützlich halte.
14.1 Gemeinsame Ressourcen initialisieren
Problem
Du hast eine Ressource, die von mehreren Teilen deines Codes gemeinsam genutzt wird. Diese Ressource muss initialisiert werden, wenn du das erste Mal auf sie zugreifst.
Lösung
Das.NET Framework enthält einen Typ speziell für diesen Zweck: Lazy<T>
. Du erstellst eine Instanz des Lazy<T>
Typs mit einem Factory Delegate, der zur Initialisierung der Instanz verwendet wird. Die Instanz wird dann über die Eigenschaft Value
verfügbar gemacht. Der folgende Code veranschaulicht den Typ Lazy<T>
:
static
int
_simpleValue
;
static
readonly
Lazy
<
int
>
MySharedInteger
=
new
Lazy
<
int
>(()
=>
_simpleValue
++);
void
UseSharedInteger
()
{
int
sharedValue
=
MySharedInteger
.
Value
;
}
Unabhängig davon, wie viele Threads gleichzeitig UseSharedInteger
aufrufen, wird der Factory Delegate nur einmal ausgeführt und alle Threads warten auf dieselbe Instanz. Sobald die Instanz erstellt wurde, wird sie zwischengespeichert und alle zukünftigen Zugriffe auf die Eigenschaft Value
geben dieselbe Instanz zurück (im ...
Get Concurrency in C# Cookbook, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.