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.