ThreadLocal<T> Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Verilerin iş parçacığı yerel depolama alanını sağlar.
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ür Parametreleri
- T
İş parçacığı başına depolanan veri türünü belirtir.
- Devralma
-
ThreadLocal<T>
- Uygulamalar
Örnekler
Aşağıdaki örnekte nasıl kullanılacağı ThreadLocal<T>gösterilmektedir:
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)
Oluşturucular
ThreadLocal<T>() |
ThreadLocal<T> Örneği başlatır. |
ThreadLocal<T>(Boolean) |
Örneği başlatır ve tüm değerlerin ThreadLocal<T> herhangi bir iş parçacığından erişilebilir olup olmadığını belirtir. |
ThreadLocal<T>(Func<T>) |
ThreadLocal<T> Örneği belirtilen |
ThreadLocal<T>(Func<T>, Boolean) |
ThreadLocal<T> Örneği belirtilen |
Özellikler
IsValueCreated |
Geçerli iş parçacığında başlatılıp başlatılmadığını Value alır. |
Value |
Geçerli iş parçacığı için bu örneğin değerini alır veya ayarlar. |
Values |
Bu örneğe erişen tüm iş parçacıkları tarafından depolanan değerleri içeren bir liste alır. |
Yöntemler
Dispose() |
ThreadLocal<T> sınıfının geçerli örneği tarafından kullanılan tüm kaynakları serbest bırakır. |
Dispose(Boolean) |
Bu ThreadLocal<T> örnek tarafından kullanılan kaynakları serbest bırakır. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
Finalize() |
Bu ThreadLocal<T> örnek tarafından kullanılan kaynakları serbest bırakır. |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli iş parçacığı için bu örneğin dize gösterimini oluşturur ve döndürür. |
Şunlara uygulanır
İş Parçacığı Güvenliği
dışında Dispose(), tüm ortak ve korumalı üyeleri ThreadLocal<T> iş parçacığı güvenlidir ve birden çok iş parçacığından eşzamanlı olarak kullanılabilir. ve IsValueCreated özellikleri için Value döndürülen değer, özelliğine erişilen iş parçacığına özgüdür.