Multithreading in C#, Teil 20: Lazy und LazyInitializer

Im vorhergehenden Artikel dieser Artikelserie habe ich Ihnen gezeigt wie Sie eine Lazy Initialization implementieren können. Ab .Net 4.0 stehen zwei Funktionalitäten bereit welche Ihnen die Implementierung der Lazy Initialization Routinen abnehmen. Diese beiden Möglichkeiten möchte ich Ihnen nachfolgend aufzeigen.

 

Lazy<T>

Die Klasse Lazy erlaubt Ihnen die Initialisierung einer Objektinstanz. Diese Klasse verwendet dabei ein Double Check Locking. Beim Initialisieren des Lazy Objektes übergeben Sie die entsprechende Factoryfunktion zum Erstellen ihres Objektes, beispielsweise den Konstruktor der Klasse. Als zweiten Parameter übergeben Sie true. Wenn Sie stattdessen false übergeben dann verwendet die Lazy Klasse eine nicht threadsichere Variante zum Erstellen des Objektes. Der folgende Quellcode zeigt wie Sie Lazy verwenden können.

class Program
{
    Lazy<MyClass> _myClass = new Lazy<MyClass>
        (() => new MyClass(), true);

    static void Main(string[] args)
    {
    }

    public MyClass MyClass
    {
        get
        {
            return _myClass.Value;
        }
    }
}

 
LazyInitializer

Die statische Klasse LazyInitializer kann ebenfalls zum Erzeugen einer Objektinstanz verwendet werden. Es wird dabei wiederrum ein Double Check Locking verwendet. Der nachfolgende Quellcode zeigt ein entsprechendes Beispiel.

class Program
{
    private MyClass _myClass;

    static void Main(string[] args)
    {
    }

    public MyClass MyClass
    {
        get
        {
            LazyInitializer.EnsureInitialized(
                ref _myClass,
                () => new MyClass());

            return _myClass;
        }
    }
}

 
Fazit

Die Klassen Lazy und LazyInitializer vereinfachen die threadsichere verzögerte Initialisierung von Objekten. Sie können mit Hilfe dieser Klassen ein Double Check Locking verwenden ohne dies selbst implementieren zu müssen.

Advertisements
Dieser Beitrag wurde unter .NET, C#, Multithreading abgelegt und mit , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s