ThreadLocal<T> Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller trådlokal lagring av 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
Typparametrar
- T
Anger vilken typ av data som lagras per tråd.
- Arv
-
ThreadLocal<T>
- Implementeringar
Exempel
I följande exempel visas hur du använder 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)
Konstruktorer
| Name | Description |
|---|---|
| ThreadLocal<T>() |
Initierar instansen ThreadLocal<T> . |
| ThreadLocal<T>(Boolean) |
Initierar instansen ThreadLocal<T> och anger om alla värden är tillgängliga från någon tråd. |
| ThreadLocal<T>(Func<T>, Boolean) |
Initierar instansen ThreadLocal<T> med den angivna |
| ThreadLocal<T>(Func<T>) |
Initierar instansen ThreadLocal<T> med den angivna |
Egenskaper
| Name | Description |
|---|---|
| IsValueCreated |
Hämtar om Value initieras i den aktuella tråden. |
| Value |
Hämtar eller anger värdet för den här instansen för den aktuella tråden. |
| Values |
Hämtar en lista som innehåller de värden som lagras av alla trådar som har använt den här instansen. |
Metoder
| Name | Description |
|---|---|
| Dispose() |
Släpper alla resurser som används av den aktuella instansen ThreadLocal<T> av klassen. |
| Dispose(Boolean) |
Frigör de resurser som används av den här ThreadLocal<T> instansen. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Finalize() |
Frigör de resurser som används av den här ThreadLocal<T> instansen. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Skapar och returnerar en strängrepresentation av den här instansen för den aktuella tråden. |
Gäller för
Trådsäkerhet
Med undantag för Dispose()är alla offentliga och skyddade medlemmar i ThreadLocal<T> trådsäkra och kan användas samtidigt från flera trådar. Värdet som returneras för Value egenskaperna och IsValueCreated är specifikt för den tråd där egenskapen används.