ThreadLocal<T> Класс

Определение

Предоставляет хранилище для данных, локальных для потока.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

Параметры типа

T

Задает тип данных, хранимых для каждого потока.Specifies the type of data stored per-thread.

Наследование
ThreadLocal<T>
Реализации

Примеры

В следующем примере показано использование 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)    

Конструкторы

ThreadLocal<T>()

Инициализирует экземпляр ThreadLocal<T>.Initializes the ThreadLocal<T> instance.

ThreadLocal<T>(Boolean)

Инициализирует экземпляр ThreadLocal<T> и указывает, доступны ли все значения из любого потока.Initializes the ThreadLocal<T> instance and specifies whether all values are accessible from any thread.

ThreadLocal<T>(Func<T>)

Инициализирует экземпляр ThreadLocal<T> с заданной функцией valueFactory.Initializes the ThreadLocal<T> instance with the specified valueFactory function.

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

Инициализирует экземпляр ThreadLocal<T>с заданными функцией valueFactory и флагом, указывающим, доступны ли все значения из любого потока.Initializes the ThreadLocal<T> instance with the specified valueFactory function and a flag that indicates whether all values are accessible from any thread.

Свойства

IsValueCreated

Получает значение, указывающее, инициализирован ли объект Value в текущем потоке.Gets whether Value is initialized on the current thread.

Value

Получает или задает значение данного экземпляра для текущего потока.Gets or sets the value of this instance for the current thread.

Values

Получает список всех значений, хранящихся в настоящий момент всеми потоками, которые получили доступа к данному экземпляру.Gets a list for all of the values currently stored by all of the threads that have accessed this instance.

Методы

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса ThreadLocal<T>.Releases all resources used by the current instance of the ThreadLocal<T> class.

Dispose(Boolean)

Освобождает ресурсы, используемые этим экземпляром ThreadLocal<T>.Releases the resources used by this ThreadLocal<T> instance.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
Finalize()

Освобождает ресурсы, используемые этим экземпляром ThreadLocal<T>.Releases the resources used by this ThreadLocal<T> instance.

GetHashCode()

Служит в качестве хэш-функции по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
ToString()

Создает и возвращает строковое представление данного экземпляра для текущего потока.Creates and returns a string representation of this instance for the current thread.

Применяется к

Потокобезопасность

За исключением Dispose() все открытые и защищенные члены ThreadLocal<T> являются потокобезопасными и могут использоваться одновременно из нескольких потоков.With the exception of Dispose(), all public and protected members of ThreadLocal<T> are thread-safe and may be used concurrently from multiple threads. Значение, возвращаемое для свойств Value и IsValueCreated, зависит от потока, к которому обращается свойство.The value returned for the Value and IsValueCreated properties is specific for the thread on which the property is accessed.

Дополнительно