ThreadLocal<T> Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Biedt thread-lokale opslag van gegevens.
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
Type parameters
- T
Hiermee geeft u het type gegevens op dat per thread is opgeslagen.
- Overname
-
ThreadLocal<T>
- Implementeringen
Voorbeelden
In het volgende voorbeeld ziet u hoe u ThreadLocal<T>gebruikt:
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)
Constructors
| Name | Description |
|---|---|
| ThreadLocal<T>() |
Initialiseert het ThreadLocal<T> exemplaar. |
| ThreadLocal<T>(Boolean) |
Initialiseert het ThreadLocal<T> exemplaar en geeft aan of alle waarden toegankelijk zijn vanuit een thread. |
| ThreadLocal<T>(Func<T>, Boolean) |
Initialiseert het ThreadLocal<T> exemplaar met de opgegeven |
| ThreadLocal<T>(Func<T>) |
Initialiseert het ThreadLocal<T> exemplaar met de opgegeven |
Eigenschappen
| Name | Description |
|---|---|
| IsValueCreated |
Hiermee wordt opgehaald of Value deze wordt geïnitialiseerd op de huidige thread. |
| Value |
Hiermee haalt u de waarde van dit exemplaar voor de huidige thread op of stelt u deze in. |
| Values |
Hiermee haalt u een lijst op met de waarden die zijn opgeslagen door alle threads die toegang hebben tot dit exemplaar. |
Methoden
| Name | Description |
|---|---|
| Dispose() |
Alle resources die door het huidige exemplaar van de ThreadLocal<T> klasse worden gebruikt, worden vrijgegeven. |
| Dispose(Boolean) |
Releases van de resources die door dit ThreadLocal<T> exemplaar worden gebruikt. |
| Equals(Object) |
Bepaalt of het opgegeven object gelijk is aan het huidige object. (Overgenomen van Object) |
| Finalize() |
Releases van de resources die door dit ThreadLocal<T> exemplaar worden gebruikt. |
| GetHashCode() |
Fungeert als de standaardhashfunctie. (Overgenomen van Object) |
| GetType() |
Hiermee haalt u de Type huidige instantie op. (Overgenomen van Object) |
| MemberwiseClone() |
Hiermee maakt u een ondiepe kopie van de huidige Object. (Overgenomen van Object) |
| ToString() |
Hiermee maakt en retourneert u een tekenreeksweergave van dit exemplaar voor de huidige thread. |
Van toepassing op
Veiligheid thread
Met uitzondering van Dispose(), alle openbare en beveiligde leden van ThreadLocal<T> zijn thread-veilig en kunnen gelijktijdig worden gebruikt vanuit meerdere threads. De waarde die wordt geretourneerd voor de Value en IsValueCreated eigenschappen is specifiek voor de thread waarop de eigenschap wordt geopend.