Compartilhar via


ThreadLocal<T> Classe

Definição

Fornece armazenamento de dados local 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

Parâmetros de tipo

T

Especifica o tipo dos dados armazenados por thread.

Herança
ThreadLocal<T>
Implementações

Exemplos

O exemplo a seguir mostra como usar 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)

Construtores

ThreadLocal<T>()

Inicializa a instância ThreadLocal<T>.

ThreadLocal<T>(Boolean)

Inicializa a instância ThreadLocal<T> e especifica se todos os valores podem ser acessados de qualquer thread.

ThreadLocal<T>(Func<T>)

Inicializa a instância ThreadLocal<T> com função valueFactory especificada.

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

Inicializa a instância ThreadLocal<T> com a função valueFactory especificada e um sinalizador que indica se todos os valores estão acessíveis em qualquer thread.

Propriedades

IsValueCreated

Indica se Value é inicializado no thread atual.

Value

Obtém ou define o valor dessa instância para o thread atual.

Values

Obtém uma lista que contém os valores armazenados por todos os threads que acessaram essa instância.

Métodos

Dispose()

Libera todos os recursos usados pela instância atual da classe ThreadLocal<T>.

Dispose(Boolean)

Libera os recursos usados por esta instância ThreadLocal<T>.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Libera os recursos usados por esta instância ThreadLocal<T>.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Cria e retorna uma representação de cadeia de caracteres desta instância para o thread atual.

Aplica-se a

Acesso thread-safe

Com exceção de Dispose(), todos os membros públicos e protegidos ThreadLocal<T> são thread-safe e podem ser usados simultaneamente de vários threads. O valor retornado para o e IsValueCreated as Value propriedades é específico para o thread no qual a propriedade é acessada.

Confira também