ThreadLocal<T> Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt Thread-lokalen Datenspeicher 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 gespeicherten Datentyp pro Thread an.
- Vererbung
-
ThreadLocal<T>
- Implementiert
Beispiele
Das folgende Beispiel veranschaulicht 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
ThreadLocal<T>() |
Initialisiert die ThreadLocal<T>-Instanz. |
ThreadLocal<T>(Boolean) |
Initialisiert die ThreadLocal<T>-Instanz und gibt an, ob alle Werte von jedem Thread aus zugänglich sind. |
ThreadLocal<T>(Func<T>) |
Initialisiert die ThreadLocal<T>-Instanz mit der angegebenen |
ThreadLocal<T>(Func<T>, Boolean) |
Initialisiert die ThreadLocal<T>-Instanz mit der angegebenen |
Eigenschaften
IsValueCreated |
Ruft einen Wert ab, der angibt, ob Value für den aktuellen Thread initialisiert wurde. |
Value |
Ruft den Wert dieser Instanz für den aktuellen Thread ab oder legt ihn fest. |
Values |
Ruft eine Liste ab, die die werte enthält, die von allen Threads gespeichert sind, auf die auf diese Instanz zugegriffen wurde. |
Methoden
Dispose() |
Gibt alle von der aktuellen Instanz der ThreadLocal<T>-Klasse verwendeten Ressourcen frei. |
Dispose(Boolean) |
Gibt die von dieser ThreadLocal<T>-Instanz verwendeten Ressourcen frei. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
Finalize() |
Gibt die von dieser ThreadLocal<T>-Instanz verwendeten Ressourcen frei. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ToString() |
Erstellt eine Zeichenfolgendarstellung dieser Instanz für den aktuellen Thread und gibt sie zurück. |
Gilt für
Threadsicherheit
Mit Ausnahme von Dispose(), alle öffentlichen und geschützten Member ThreadLocal<T> von Thread-safe und können gleichzeitig von mehreren Threads verwendet werden. Der für die Value IsValueCreated Eigenschaften zurückgegebene Wert ist für den Thread spezifisch, auf den auf die Eigenschaft zugegriffen wird.