Ler em inglês

Partilhar via


AsyncLocal<T> Classe

Definição

Representa dados de ambiente que são locais para um determinado fluxo de controle assíncrono, como um método assíncrono.

C#
public sealed class AsyncLocal<T>

Parâmetros de tipo

T

O tipo dos dados do ambiente.

Herança
AsyncLocal<T>

Exemplos

O exemplo a seguir usa a AsyncLocal<T> classe para persistir um valor de cadeia de caracteres em um fluxo assíncrono. Ele também contrasta o uso com 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 ''

Comentários

Como o modelo de programação assíncrona baseado em tarefa tende a abstrair o uso de threads, AsyncLocal<T> as instâncias podem ser usadas para persistir dados entre threads.

A AsyncLocal<T> classe também fornece notificações opcionais quando o valor associado ao thread atual é alterado, porque ele foi explicitamente alterado definindo a Value propriedade ou alterado implicitamente quando o thread encontrou uma await ou outra transição de contexto.

Construtores

AsyncLocal<T>()

Cria uma instância AsyncLocal<T> que não recebe notificações de alteração.

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

Cria uma instância local AsyncLocal<T> que recebe notificações de alteração.

Propriedades

Value

Obtém ou define o valor dos dados ambiente.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Produto Versões
.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