Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe AsyncLocal<T>

 

Data di pubblicazione: ottobre 2016

Rappresenta dati di ambiente locali rispetto a un flusso di controllo asincrono specificato, ad esempio un metodo asincrono.

Spazio dei nomi:   System.Threading
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Threading.AsyncLocal<T>

public sealed class AsyncLocal<T>

Parametri tipo

T

Tipo dei dati di ambiente.

NomeDescrizione
System_CAPS_pubmethodAsyncLocal<T>()

Crea un'istanza dell'istanza di AsyncLocal<T> che non riceve notifiche di modifica.

System_CAPS_pubmethodAsyncLocal<T>(Action<AsyncLocalValueChangedArgs<T>>)

Crea un'istanza dell'istanza di AsyncLocal<T> locale che riceve notifiche di modifica.

NomeDescrizione
System_CAPS_pubpropertyValue

Ottiene o imposta il valore dei dati di ambiente.

NomeDescrizione
System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.(Ereditato da Object.)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente.(Ereditato da Object.)

Because the task-based asynchronous programming model tends to abstract the use of threads, T:System.Threading.AsyncLocal`1 instances can be used to persist data across threads.

The T:System.Threading.AsyncLocal`1 class also provides optional notifications when the value associated with the current thread changes, either because it was explicitly changed by setting the P:System.Threading.AsyncLocal`1.Value property, or implicitly changed when the thread encountered an await or other context transition.

The following example uses the T:System.Threading.AsyncLocal`1 class to persist a string value across an asynchronous flow. It also contrasts the use of T:System.Threading.AsyncLocal`1 with T:System.Threading.ThreadLocal`1.

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 void Main(string[] args)
    {
        AsyncMethodA().Wait();
    }
}
// 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 ''

Universal Windows Platform
Disponibile da 10
.NET Framework
Disponibile da 4.6

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: