Lire en anglais

Partager via


AsyncLocal<T> Classe

Définition

Représente les données ambiantes qui sont locales à un flux de contrôle asynchrone donné, par exemple une méthode asynchrone.

C#
public sealed class AsyncLocal<T>

Paramètres de type

T

Type des données ambiantes.

Héritage
AsyncLocal<T>

Exemples

L’exemple suivant utilise la AsyncLocal<T> classe pour conserver une valeur de chaîne sur un flux asynchrone. Elle contraste également avec l’utilisation de AsyncLocal<T> ThreadLocal<T>.

C#
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 ''

Remarques

Étant donné que le modèle de programmation asynchrone basé sur des tâches tend à abstraiter l’utilisation des threads, AsyncLocal<T> les instances peuvent être utilisées pour conserver des données entre les threads.

La AsyncLocal<T> classe fournit également des notifications facultatives lorsque la valeur associée au thread actuel change, soit parce qu’elle a été explicitement modifiée en définissant la Value propriété, soit implicitement modifiée lorsque le thread a rencontré une await transition de contexte ou d’une autre transition de contexte.

Constructeurs

AsyncLocal<T>()

Instancie une instance de AsyncLocal<T> qui ne reçoit pas de notifications de modification.

AsyncLocal<T>(Action<AsyncLocalValueChangedArgs<T>>)

Instancie une instance locale de AsyncLocal<T> qui ne reçoit pas de notifications de modification.

Propriétés

Value

Obtient ou définit la valeur des données ambiantes.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0