Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Método Thread.SetData

Defina os dados no slot especificado no thread em execução no momento, para o domínio atual do segmento. Para obter um melhor desempenho, use os campos marcados com o atributo de ThreadStaticAttribute em vez de isso.

Namespace:  System.Threading
Assembly:  mscorlib (em mscorlib.dll)
[HostProtectionAttribute(SecurityAction.LinkDemand, SharedState = true, ExternalThreading = true)]
public static void SetData(
	LocalDataStoreSlot slot,
	Object data
)

Parâmetros

slot
Tipo: System.LocalDataStoreSlot
LocalDataStoreSlot para definir o valor.
data
Tipo: System.Object
O valor a ser definido.
Observação importanteImportante

O .NET Framework fornece dois mecanismos para usar o armazenamento local (TLS) de thread: campos estáticos de com relativo (isto é, campos marcados com o atributo de ThreadStaticAttribute ) e slots de dados. os campos estáticos de com relativo possibilitam desempenho muito melhor do que slots de dados, e permite a verificação de tipo em tempo de compilação. Para obter mais informações sobre como usar TLS, consulte Armazenamento Local de segmento: Relativo ao segmento campos estáticos e Slots de dados.

Segmentos usam um mecanismo de armazenamento local da memória para armazenar dados específicos de segmento. O common language runtime atribui uma matriz de armazenamento de dados de vários slot a cada processo quando é criado. O thread pode atribuir um slot de dados no armazenamento de dados, armazenamento e recuperar um valor de dados no slot, e para liberar o encaixe para reutilização após a terminar do procedimento de segmento e o objeto de Thread foi recuperado pela coleta de lixo. Os slots de dados são exclusivos pelo segmento. Nenhum outro segmento (nem um segmento filho) pode obter os dados.

[Visual Basic]

ObservaçãoObservação

SetData é um método de Shared sempre que se aplica ao thread em execução no momento, mesmo se você chamá-lo usando uma variável que faz referência a outro segmento. Para evitar confusão, use o nome da classe ao chamar métodos de Shared : Thread.SetData(testSlot, "test data").

ObservaçãoObservação

O atributo HostProtectionAttribute aplicado a este tipo ou membro tem o seguinte valor da propriedade Resources: SharedState | ExternalThreading. HostProtectionAttribute não afeta aplicativos de área de trabalho (que são normalmente iniciados com o clique duplo em um ícone, a digitação de um comando ou a inserção de uma URL em um navegador). Para obter mais informações, consulte a classe HostProtectionAttribute ou Atributos de proteção de Host e programação de SQL Server.

Esta seção contém dois exemplos de código. O primeiro exemplo mostra como usar um campo que foi marcado com o atributo de ThreadStaticAttribute para armazenar informações específicas de segmento. O segundo exemplo mostra como usar um slot de dados para fazer a mesma coisa.

primeiro exemplo

O exemplo a seguir mostra como usar um campo que é marcado com ThreadStaticAttribute para armazenar informações específicas de segmento. Essa técnica proporciona um desempenho melhor do que a técnica que é mostrada no segundo exemplo.


using System;
using System.Threading;

class Test
{
    static void Main()
    {
        for(int i = 0; i < 3; i++)
        {
            Thread newThread = new Thread(ThreadData.ThreadStaticDemo);
            newThread.Start();
        }
    }
}

class ThreadData
{
    [ThreadStaticAttribute]
    static int threadSpecificData;

    public static void ThreadStaticDemo()
    {
        // Store the managed thread id for each thread in the static
        // variable.
        threadSpecificData = Thread.CurrentThread.ManagedThreadId;

        // Allow other threads time to execute the same code, to show
        // that the static data is unique to each thread.
        Thread.Sleep( 1000 );

        // Display the static data.
        Console.WriteLine( "Data for managed thread {0}: {1}", 
            Thread.CurrentThread.ManagedThreadId, threadSpecificData );
    }
}

/* This code example produces output similar to the following:

Data for managed thread 4: 4
Data for managed thread 5: 5
Data for managed thread 3: 3
 */


segundo exemplo

O exemplo seguinte demonstra como usar um slot chamado de dados para armazenar informações específicas de segmento.


using System;
using System.Threading;

class Test
{
    public static void Main()
    {
        Thread[] newThreads = new Thread[4];
        int i;
        for (i = 0; i < newThreads.Length; i++)
        {
            newThreads[i] =
                new Thread(new ThreadStart(Slot.SlotTest));
            newThreads[i].Start();
        }
        Thread.Sleep(2000);
        for (i = 0; i < newThreads.Length; i++)
        {
            newThreads[i].Join();
            Console.WriteLine("Thread_{0} finished.",
                newThreads[i].ManagedThreadId);
        }
    }
}

class Slot
{
    private static Random randomGenerator = new Random();

    public static void SlotTest()
    {
        // Set random data in each thread's data slot.
        int slotData = randomGenerator.Next(1, 200);
        int threadId = Thread.CurrentThread.ManagedThreadId;

        Thread.SetData(
            Thread.GetNamedDataSlot("Random"),
            slotData);

        // Show what was saved in the thread's data slot.
        Console.WriteLine("Data stored in thread_{0}'s data slot: {1,3}",
            threadId, slotData);

        // Allow other threads time to execute SetData to show
        // that a thread's data slot is unique to itself.
        Thread.Sleep(1000);

        int newSlotData =
            (int)Thread.GetData(Thread.GetNamedDataSlot("Random"));

        if (newSlotData == slotData)
        {
            Console.WriteLine("Data in thread_{0}'s data slot is still: {1,3}",
                threadId, newSlotData);
        }
        else
        {
            Console.WriteLine("Data in thread_{0}'s data slot changed to: {1,3}",
                threadId, newSlotData);
        }
    }
}


.NET Framework

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
© 2013 Microsoft. Todos os direitos reservados.