ThreadLocal<T> Klasse

Definition

Stellt threadlokale Speicherung von Daten bereit.

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

Typparameter

T

Gibt den Typ der pro Thread gespeicherten Daten an.

Vererbung
ThreadLocal<T>
Implementiert

Beispiele

Das folgende Beispiel zeigt die Verwendung von 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)

Konstruktoren

Name Beschreibung
ThreadLocal<T>()

Initialisiert die ThreadLocal<T> Instanz.

ThreadLocal<T>(Boolean)

Initialisiert die ThreadLocal<T> Instanz und gibt an, ob auf alle Werte über einen beliebigen Thread zugegriffen werden kann.

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

Initialisiert die ThreadLocal<T> Instanz mit der angegebenen valueFactory Funktion und einem Flag, das angibt, ob auf alle Werte über einen beliebigen Thread zugegriffen werden kann.

ThreadLocal<T>(Func<T>)

Initialisiert die ThreadLocal<T> Instanz mit der angegebenen valueFactory Funktion.

Eigenschaften

Name Beschreibung
IsValueCreated

Ruft ab, ob Value im aktuellen Thread initialisiert wird.

Value

Dient zum Abrufen oder Festlegen des Werts dieser Instanz für den aktuellen Thread.

Values

Ruft eine Liste ab, die die von allen Threads gespeicherten Werte enthält, auf die auf diese Instanz zugegriffen wurde.

Methoden

Name Beschreibung
Dispose()

Gibt alle Ressourcen frei, die von der aktuellen Instanz der ThreadLocal<T> Klasse verwendet werden.

Dispose(Boolean)

Gibt die von dieser ThreadLocal<T> Instanz verwendeten Ressourcen frei.

Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
Finalize()

Gibt die von dieser ThreadLocal<T> Instanz verwendeten Ressourcen frei.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Erstellt und gibt eine Zeichenfolgendarstellung dieser Instanz für den aktuellen Thread zurück.

Gilt für:

Threadsicherheit

Mit Ausnahme von Dispose(), alle öffentlichen und geschützten Member von ThreadLocal<T> sind threadsicher und können gleichzeitig aus mehreren Threads verwendet werden. Der für die Value Eigenschaften IsValueCreated zurückgegebene Wert ist spezifisch für den Thread, auf den die Eigenschaft zugegriffen wird.

Weitere Informationen