ThreadLocal<T> Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje úložiště dat v místním vlákně.
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
Parametry typu
- T
Určuje typ dat uložených pro jedno vlákno.
- Dědičnost
-
ThreadLocal<T>
- Implementuje
Příklady
Následující příklad ukazuje, jak použít 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)
Konstruktory
ThreadLocal<T>() |
Inicializuje ThreadLocal<T> instanci. |
ThreadLocal<T>(Boolean) |
Inicializuje ThreadLocal<T> instanci a určuje, zda jsou všechny hodnoty přístupné z libovolného vlákna. |
ThreadLocal<T>(Func<T>) |
Inicializuje ThreadLocal<T> instanci se zadanou |
ThreadLocal<T>(Func<T>, Boolean) |
Inicializuje ThreadLocal<T> instanci se zadanou |
Vlastnosti
IsValueCreated |
Získá, zda Value je inicializován v aktuálním vlákně. |
Value |
Získá nebo nastaví hodnotu této instance pro aktuální vlákno. |
Values |
Získá seznam obsahující hodnoty uložené všemi vlákny, které mají přístup k této instanci. |
Metody
Dispose() |
Uvolní všechny prostředky používané aktuální instancí ThreadLocal<T> třídy. |
Dispose(Boolean) |
Uvolní prostředky používané touto ThreadLocal<T> instancí. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
Finalize() |
Uvolní prostředky používané touto ThreadLocal<T> instancí. |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
ToString() |
Vytvoří a vrátí řetězcovou reprezentaci této instance pro aktuální vlákno. |
Platí pro
Bezpečný přístup z více vláken
S výjimkou Dispose(), všechny veřejné a chráněné členy ThreadLocal<T> jsou bezpečné pro vlákna a mohou být použity souběžně z více vláken. Hodnota vrácená pro Value vlastnosti a vlastnosti IsValueCreated je specifická pro vlákno, na kterém je vlastnost přístup.