ThreadLocal<T> Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Fournit le stockage local des données de thread.
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
Paramètres de type
- T
Spécifie le type de données stockées par thread.
- Héritage
-
ThreadLocal<T>
- Implémente
Exemples
L'exemple suivant montre comment utiliser 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)
Constructeurs
ThreadLocal<T>() |
Initialise l’instance ThreadLocal<T>. |
ThreadLocal<T>(Boolean) |
Initialise l’instance ThreadLocal<T> et spécifie si toutes les valeurs sont accessibles à partir de n’importe quel thread. |
ThreadLocal<T>(Func<T>) |
Initialise l'instance de ThreadLocal<T> avec la fonction |
ThreadLocal<T>(Func<T>, Boolean) |
Initialise l’instance ThreadLocal<T> avec la fonction |
Propriétés
IsValueCreated |
Obtient une valeur qui indique si Value est initialisé sur le thread actuel. |
Value |
Obtient ou définit la valeur de cette instance pour le thread actuel. |
Values |
Obtient une liste contenant les valeurs stockées par tous les threads qui ont accédé à cette instance. |
Méthodes
Dispose() |
Libère toutes les ressources utilisées par l'instance actuelle de la classe ThreadLocal<T>. |
Dispose(Boolean) |
Libère les ressources utilisées par cette instance de ThreadLocal<T>. |
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
Finalize() |
Libère les ressources utilisées par cette instance de ThreadLocal<T>. |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ToString() |
Crée et retourne une représentation sous forme de chaîne de cette instance pour le thread actuel. |
S’applique à
Cohérence de thread
À l’exception de Dispose(), tous les membres publics et protégés sont ThreadLocal<T> thread-safe et peuvent être utilisés simultanément à partir de plusieurs threads. La valeur retournée pour les Value propriétés et IsValueCreated les propriétés est spécifique pour le thread sur lequel la propriété est accessible.