Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

dangerousThreadingAPI MDA

The dangerousThreadingAPI Assistente de depuração gerenciada (MDA) é ativado quando o Thread.Suspend método é chamado em um thread diferente do thread corrente.

Um aplicativo não responder ou trava indefinidamente. Dados de sistema ou aplicativo podem ser deixados em estado imprevisível temporariamente ou mesmo depois que um aplicativo foi desligado. Algumas operações não estão Concluindo conforme o esperado.

Sintomas podem variar amplamente de devido a aleatoriedade inerente do problema.

Um thread está suspensa assincronamente por outro segmento usando o Suspend método. Não é possível para determinar quando é seguro suspender outro thread que pode ser no meio de uma operação. Suspender o thread pode resultar em corrupção de dados ou quebra de constantes. Um segmento deve ser colocado em um estado suspenso e nunca reiniciado usando o Resume método, o aplicativo pode parar indefinidamente e possivelmente danificar dados do aplicativo. Esses métodos foram marcados sistema autônomo obsoleto.

Se os primitivos de sincronização são mantidos por thread-alvo, eles permanecerão mantidos durante a suspensão. Isso pode levar a travamentos deve outro thread, por exemplo o thread executar o Suspend, tentam adquirir um bloquear no primitivo. Nessa situação, o problema se manifesta sistema autônomo um deadlock.

Evite designs que exigem o uso de Suspend e Resume. Cooperação entre threads, usar primitivos de sincronização, sistema autônomo Monitor, ReaderWriterLock, Mutex, ou o translation from VPE for Csharp lockdemonstrativo. Se você deve usar esses métodos, reduzir a janela de time e minimizar a quantidade de código que é executado enquanto o thread está em um estado suspenso.

Este MDA não tem efeito sobre o CLR. Ele só reporta dados sobre as operações de segmentação perigosas.

O MDA identifica o método threading perigoso que provocou sua seja ativado.

<mdaConfig>
  <assistants>
    <dangerousThreadingAPI />
  </assistants>
</mdaConfig>

O exemplo de código a seguir demonstra uma telefonar para o Suspend método faz com que a ativação das dangerousThreadingAPI.

using System.Threading;
void FireMda()
{
    Thread t = new Thread(delegate() { Thread.Sleep(1000); });
    t.Start();
    // The following line activates the MDA.
    t.Suspend(); 
    t.Resume();
    t.Join();
}

Contribuições da comunidade

Mostrar: