Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Costruttore Lazy<T>(Boolean)

 

Data di pubblicazione: ottobre 2016

Inizializza una nuova istanza della classe Lazy<T>. Quando si verifica l'inizializzazione differita, vengono usati il costruttore predefinito del tipo di destinazione e la modalità di inizializzazione specificata.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public Lazy(
	bool isThreadSafe
)

Parametri

isThreadSafe
Type: System.Boolean

true per rendere questa istanza utilizzabile contemporaneamente da più thread. false per rendere l'istanza utilizzabile da un solo thread alla volta.

La modalità thread safety di un Lazy<T> istanza che viene inizializzato con questo costruttore è LazyThreadSafetyMode.ExecutionAndPublication se isThreadSafe è true; in caso contrario, la modalità è LazyThreadSafetyMode.None. La modalità thread safety viene descritto il comportamento quando più thread tentano di inizializzare il Lazy<T> istanza. Per specificare il LazyThreadSafetyMode.PublicationOnly modalità, utilizzare il Lazy<T>(Func<T>, LazyThreadSafetyMode) o Lazy<T>(LazyThreadSafetyMode) costruttore.

Oggetto Lazy<T> istanza che viene creato con questo costruttore non memorizzato nella cache di eccezioni. Per ulteriori informazioni, vedere ilLazy<T> classe o System.Threading.LazyThreadSafetyMode enumerazione.

Nell'esempio seguente viene illustrato l'utilizzo di questo costruttore per creare un inizializzatore lazy che non è thread-safe, per gli scenari in cui si verifica ogni accesso all'oggetto con inizializzazione differita sullo stesso thread. Viene inoltre illustrato l'utilizzo del Lazy<T>(LazyThreadSafetyMode) costruttore (specificando LazyThreadSafetyMode.None per mode. Per passare a un costruttore diverso, è sufficiente modificare il costruttore viene impostata come commento.

System_CAPS_noteNota

Per il codice viene illustrato come utilizzare questo costruttore negli scenari multithreading (specificando true per isThreadSafe), vedere l'esempio per il Lazy<T>() costruttore.

Nell'esempio viene definito un LargeObject classe che verrà inizializzata in modo differito. Nel Main (metodo), nell'esempio viene creato un Lazy<T> istanza e quindi si verifica una sospensione. Quando si preme il invio chiave, nell'esempio si accede di Value proprietà del Lazy<T> istanza, che provoca l'inizializzazione di. Il costruttore del LargeObject classe viene visualizzato un messaggio di console.

System_CAPS_noteNota

Per semplicità, in questo esempio viene utilizzata un'istanza globale di Lazy<T> e tutti i metodi sono static (Shared in Visual Basic). Questi non sono requisiti per l'uso di inizializzazione differita.

using System;
using System.Threading;

class Program
{
    static Lazy<LargeObject> lazyLargeObject = null;

    static void Main()
    {
        // The lazy initializer is created here. LargeObject is not created until the 
        // ThreadProc method executes.
        lazyLargeObject = new Lazy<LargeObject>(false);

        // The following lines show how to use other constructors to achieve exactly the
        // same result as the previous line: 
        //lazyLargeObject = new Lazy<LargeObject>(LazyThreadSafetyMode.None);


        Console.WriteLine(
            "\r\nLargeObject is not created until you access the Value property of the lazy" +
            "\r\ninitializer. Press Enter to create LargeObject.");
        Console.ReadLine();

        LargeObject large = lazyLargeObject.Value;

        large.Data[11] = 89;

        Console.WriteLine("\r\nPress Enter to end the program");
        Console.ReadLine();
    }
}

class LargeObject
{
    public LargeObject()
    {
        Console.WriteLine("LargeObject was created on thread id {0}.", 
            Thread.CurrentThread.ManagedThreadId);
    }
    public long[] Data = new long[100000000];
}

/* This example produces output similar to the following:

LargeObject is not created until you access the Value property of the lazy
initializer. Press Enter to create LargeObject.

LargeObject was created on thread id 1.

Press Enter to end the program
 */

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 4.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 4.0
Windows Phone Silverlight
Disponibile da 8.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: