AsyncLocal<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.
Zaman uyumsuz bir yöntem gibi belirli bir zaman uyumsuz denetim akışı için yerel olan ortam verilerini temsil eder.
generic <typename T>
public ref class AsyncLocal sealed
public sealed class AsyncLocal<T>
type AsyncLocal<'T> = class
Public NotInheritable Class AsyncLocal(Of T)
Tür Parametreleri
- T
Ortam verilerinin türü.
- Devralma
-
AsyncLocal<T>
Örnekler
Aşağıdaki örnek, bir dize değerini zaman uyumsuz bir akışta kalıcı hale getirmek için sınıfını kullanır AsyncLocal<T> . Ayrıca ile ThreadLocal<T>kullanımını AsyncLocal<T> da karşıttır.
using System;
using System.Threading;
using System.Threading.Tasks;
class Example
{
static AsyncLocal<string> _asyncLocalString = new AsyncLocal<string>();
static ThreadLocal<string> _threadLocalString = new ThreadLocal<string>();
static async Task AsyncMethodA()
{
// Start multiple async method calls, with different AsyncLocal values.
// We also set ThreadLocal values, to demonstrate how the two mechanisms differ.
_asyncLocalString.Value = "Value 1";
_threadLocalString.Value = "Value 1";
var t1 = AsyncMethodB("Value 1");
_asyncLocalString.Value = "Value 2";
_threadLocalString.Value = "Value 2";
var t2 = AsyncMethodB("Value 2");
// Await both calls
await t1;
await t2;
}
static async Task AsyncMethodB(string expectedValue)
{
Console.WriteLine("Entering AsyncMethodB.");
Console.WriteLine(" Expected '{0}', AsyncLocal value is '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value);
await Task.Delay(100);
Console.WriteLine("Exiting AsyncMethodB.");
Console.WriteLine(" Expected '{0}', got '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value);
}
static async Task Main(string[] args)
{
await AsyncMethodA();
}
}
// The example displays the following output:
// Entering AsyncMethodB.
// Expected 'Value 1', AsyncLocal value is 'Value 1', ThreadLocal value is 'Value 1'
// Entering AsyncMethodB.
// Expected 'Value 2', AsyncLocal value is 'Value 2', ThreadLocal value is 'Value 2'
// Exiting AsyncMethodB.
// Expected 'Value 2', got 'Value 2', ThreadLocal value is ''
// Exiting AsyncMethodB.
// Expected 'Value 1', got 'Value 1', ThreadLocal value is ''
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Dim _asyncLocalString As New AsyncLocal(Of String)()
Dim _threadLocalString As New ThreadLocal(Of String)()
Async Function AsyncMethodA() As Task
' Start multiple async method calls, with different AsyncLocal values.
' We also set ThreadLocal values, to demonstrate how the two mechanisms differ.
_asyncLocalString.Value = "Value 1"
_threadLocalString.Value = "Value 1"
Dim t1 = AsyncMethodB("Value 1")
_asyncLocalString.Value = "Value 2"
_threadLocalString.Value = "Value 2"
Dim t2 = AsyncMethodB("Value 2")
' Await both calls
await t1
await t2
End Function
Async Function AsyncMethodB(expectedValue As String) As Task
Console.WriteLine("Entering AsyncMethodB.")
Console.WriteLine(" Expected '{0}', AsyncLocal value is '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value)
await Task.Delay(100)
Console.WriteLine("Exiting AsyncMethodB.")
Console.WriteLine(" Expected '{0}', got '{1}', ThreadLocal value is '{2}'",
expectedValue, _asyncLocalString.Value, _threadLocalString.Value)
End Function
Public Sub Main()
AsyncMethodA.Wait()
End Sub
End Module
' The example displays the following output:
' Entering AsyncMethodB.
' Expected 'Value 1', AsyncLocal value is 'Value 1', ThreadLocal value is 'Value 1'
' Entering AsyncMethodB.
' Expected 'Value 2', AsyncLocal value is 'Value 2', ThreadLocal value is 'Value 2'
' Exiting AsyncMethodB.
' Expected 'Value 2', got 'Value 2', ThreadLocal value is ''
' Exiting AsyncMethodB.
' Expected 'Value 1', got 'Value 1', ThreadLocal value is ''
Açıklamalar
Görev tabanlı zaman uyumsuz programlama modeli iş parçacıklarının kullanımını soyutlama eğiliminde olduğundan, AsyncLocal<T> örnekler verileri iş parçacıkları arasında kalıcı hale getirmek için kullanılabilir.
Sınıfı AsyncLocal<T> ayrıca, geçerli iş parçacığıyla ilişkili değer değiştiğinde isteğe bağlı bildirimler de sağlar; çünkü özellik ayarlanarak Value açıkça değiştirildi veya iş parçacığı bir veya başka bir await
bağlam geçişiyle karşılaştığında örtük olarak değiştirildi.
Oluşturucular
AsyncLocal<T>() |
Değişiklik bildirimleri almayan bir AsyncLocal<T> örneği başlatır. |
AsyncLocal<T>(Action<AsyncLocalValueChangedArgs<T>>) |
Değişiklik bildirimleri alan yerel bir AsyncLocal<T> örneği başlatır. |
Özellikler
Value |
Ortam verilerinin değerini alır veya ayarlar. |
Yöntemler
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
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 nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |