ThreadLocal<T> Classe

Definizione

Consente l'archiviazione dei dati nella memoria locale dei thread.Provides thread-local storage of data.

generic <typename T>
public ref class ThreadLocal : IDisposable
public class ThreadLocal<T> : IDisposable
type ThreadLocal<'T> = class
    interface IDisposable
Public Class ThreadLocal(Of T)
Implements IDisposable

Parametri di tipo

T

Specifica il tipo di dati archiviati per thread.Specifies the type of data stored per-thread.

Ereditarietà
ThreadLocal<T>
Implementazioni

Esempi

Nell'esempio riportato di seguito viene illustrato come usare ThreadLocal<T>:The following example shows how to use ThreadLocal<T>:

using System;
using System.Threading;
using System.Threading.Tasks;

class ThreadLocalDemo
{
    
        // Demonstrates:
        //      ThreadLocal(T) constructor
        //      ThreadLocal(T).Value
        //      One usage of ThreadLocal(T)
        static void Main()
        {
            // Thread-Local variable that yields a name for a thread
            ThreadLocal<string> ThreadName = new ThreadLocal<string>(() =>
            {
                return "Thread" + Thread.CurrentThread.ManagedThreadId;
            });

            // Action that prints out ThreadName for the current thread
            Action action = () =>
            {
                // If ThreadName.IsValueCreated is true, it means that we are not the
                // first action to run on this thread.
                bool repeat = ThreadName.IsValueCreated;

                Console.WriteLine("ThreadName = {0} {1}", ThreadName.Value, repeat ? "(repeat)" : "");
            };

            // Launch eight of them.  On 4 cores or less, you should see some repeat ThreadNames
            Parallel.Invoke(action, action, action, action, action, action, action, action);

            // Dispose when you are done
            ThreadName.Dispose();
        }
}
// This multithreading example can produce different outputs for each 'action' invocation and will vary with each run.
// Therefore, the example output will resemble but may not exactly match the following output (from a 4 core processor):
// ThreadName = Thread5 
// ThreadName = Thread6 
// ThreadName = Thread4 
// ThreadName = Thread6 (repeat)
// ThreadName = Thread1 
// ThreadName = Thread4 (repeat)
// ThreadName = Thread7 
// ThreadName = Thread5 (repeat)
Imports System.Threading
Imports System.Threading.Tasks

Module ThreadLocalDemo

    ' Demonstrates:
    ' ThreadLocal(T) constructor
    ' ThreadLocal(T).Value
    ' One usage of ThreadLocal(T)
    Sub Main()
        ' Thread-Local variable that yields a name for a thread
        Dim ThreadName As New ThreadLocal(Of String)(
            Function()
                Return "Thread" & Thread.CurrentThread.ManagedThreadId
            End Function)

        ' Action that prints out ThreadName for the current thread
        Dim action As Action =
            Sub()
                ' If ThreadName.IsValueCreated is true, it means that we are not the
                ' first action to run on this thread.
                Dim repeat As Boolean = ThreadName.IsValueCreated

                Console.WriteLine("ThreadName = {0} {1}", ThreadName.Value, If(repeat, "(repeat)", ""))
            End Sub

        ' Launch eight of them. On 4 cores or less, you should see some repeat ThreadNames
        Parallel.Invoke(action, action, action, action, action, action, action, action)

        ' Dispose when you are done
        ThreadName.Dispose()
    End Sub
End Module
' This multithreading example can produce different outputs for each 'action' invocation and will vary with each run.
' Therefore, the example output will resemble but may not exactly match the following output (from a 4 core processor):
' ThreadName = Thread5 
' ThreadName = Thread6 
' ThreadName = Thread4 
' ThreadName = Thread6 (repeat)
' ThreadName = Thread1 
' ThreadName = Thread4 (repeat)
' ThreadName = Thread7 
' ThreadName = Thread5 (repeat)    

Costruttori

ThreadLocal<T>()

Inizializza l'istanza di ThreadLocal<T>.Initializes the ThreadLocal<T> instance.

ThreadLocal<T>(Boolean)

Inizializza l'istanza di ThreadLocal<T> e specifica se tutti i valori sono accessibili da qualsiasi thread.Initializes the ThreadLocal<T> instance and specifies whether all values are accessible from any thread.

ThreadLocal<T>(Func<T>)

Inizializza l'istanza di ThreadLocal<T> con la funzione valueFactory specificata.Initializes the ThreadLocal<T> instance with the specified valueFactory function.

ThreadLocal<T>(Func<T>, Boolean)

Inizializza l'istanza di ThreadLocal<T> con la funzione valueFactory specificata e un flag che indica se tutti i valori sono accessibili da qualsiasi thread.Initializes the ThreadLocal<T> instance with the specified valueFactory function and a flag that indicates whether all values are accessible from any thread.

Proprietà

IsValueCreated

Ottiene un valore che indica se l'oggetto Value è inizializzato sul thread corrente.Gets whether Value is initialized on the current thread.

Value

Ottiene o imposta il valore di questa istanza per il thread corrente.Gets or sets the value of this instance for the current thread.

Values

Ottiene un elenco di tutti i valori attualmente archiviati da tutti i thread che hanno eseguito l'accesso a questa istanza.Gets a list for all of the values currently stored by all of the threads that have accessed this instance.

Metodi

Dispose()

Rilascia tutte le risorse usate dall'istanza corrente della classe ThreadLocal<T>.Releases all resources used by the current instance of the ThreadLocal<T> class.

Dispose(Boolean)

Rilascia le risorse usate dall'istanza di ThreadLocal<T>.Releases the resources used by this ThreadLocal<T> instance.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
Finalize()

Rilascia le risorse usate dall'istanza di ThreadLocal<T>.Releases the resources used by this ThreadLocal<T> instance.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Crea e restituisce una rappresentazione di stringa di questa istanza per il thread corrente.Creates and returns a string representation of this instance for the current thread.

Si applica a

Thread safety

Ad eccezione di Dispose(), tutti i membri pubblici e protetti di ThreadLocal<T> sono thread-safe e possono essere utilizzati contemporaneamente da più thread.With the exception of Dispose(), all public and protected members of ThreadLocal<T> are thread-safe and may be used concurrently from multiple threads. Il valore restituito per le proprietà Value e IsValueCreated è specifico per il thread in cui viene eseguito l'accesso alla proprietà.The value returned for the Value and IsValueCreated properties is specific for the thread on which the property is accessed.

Vedi anche