DoNotParallelizeAttribute Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Exclui um teste, uma classe de teste ou um assembly de teste da paralelização no assembly. Os testes afetados nunca são executados simultaneamente com qualquer outro teste na mesma origem de teste e, quando a paralelização está habilitada, são adiados para serem executados sequencialmente após a conclusão de cada teste paralelizável nessa origem.
public ref class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)]
public class DoNotParallelizeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)]
public class DoNotParallelizeAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=false)>]
type DoNotParallelizeAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Method)>]
type DoNotParallelizeAttribute = class
inherit Attribute
Public Class DoNotParallelizeAttribute
Inherits Attribute
- Herança
-
DoNotParallelizeAttribute
- Atributos
Comentários
O atributo fornece duas garantias ao mesmo tempo e a segunda é fácil de ignorar:
Exclusão mútua. Um teste que carrega esse atributo , diretamente ou por meio de sua classe ou seu assembly, nunca é executado ao mesmo tempo que qualquer outro teste na mesma origem. Ele é executado por conta própria.
Adiamento. Quando a paralelização no assembly está habilitada, o agendador particiona os testes de uma origem em um conjunto paralelizável e em um conjunto não paralelizável. Ele executa todo o conjunto paralelizável para conclusão primeiro e, em seguida, executa o conjunto não paralelizável – um teste de cada vez – no final da execução dessa origem. Como o particionamento é por origem de teste (assembly), "executa por último" e "executa sozinho" são garantias relativas aos outros testes nessa mesma origem; uma execução que abrange várias fontes tem uma cauda adiada separada para cada uma delas.
Isso torna o custo do atributo fácil de ser subestimado. Um teste adiado não pode se sobrepor a nenhum outro teste na mesma origem, portanto, sua duração é adicionada ao caminho crítico dessa fonte em vez de absorvida pelo trabalho paralelo que ocorre ao lado dele. Um único teste lento que carrega esse atributo é, portanto, desproporcionalmente caro em sua origem: ele alonga a execução dessa fonte por aproximadamente sua própria duração, além de nunca ser executado em paralelo com qualquer outro teste na origem. (Ele ainda pode se sobrepor a testes de outras fontes, que podem ser executados em hosts separados, portanto, esse custo é para o caminho crítico da origem em vez de necessariamente para toda a execução.)
Como os testes adiados são executados somente após a conclusão do conjunto paralelizável, uma execução cancelada ou anulada durante a fase paralelizável pode ser concluída sem executar nenhuma delas: "execuções por último" e "talvez não sejam executadas quando a execução for cancelada antecipadamente" são verdadeiras.
Nenhum efeito quando a paralelização está desativada. O MSTest não paraleliza por padrão; A paralelização no assembly é aceita por meio ParallelizeAttribute ([assembly: Parallelize]), das configurações de execução equivalentes ou das propriedades doMSTestParallelizeWorkersMSTestParallelizeScope / MSBuild. Quando a paralelização não está habilitada, todos os testes já são executados sequencialmente, portanto, esse atributo é inerte — não há nada do que recusar.
O atributo pode ser aplicado em três níveis:
- Assembly – cada teste no assembly é excluído da paralelização, equivalente a desabilitar a paralelização desse assembly.
- Classe – todos os testes na classe são excluídos; os testes da classe são executados sequencialmente na fase adiada.
- Método – somente o teste anotado é excluído e adiado; o restante de sua classe ainda pode ser executado em paralelo.
Esse é um controle grosseiro: ele opta por um teste totalmente fora do paralelismo. Quando apenas um recurso compartilhado específico é afirmado, prefira ResourceLockAttribute, que serializa apenas os testes que declaram o mesmo recurso em vez de excluí-los completamente da paralelização. Se um teste carrega ambos os atributos, DoNotParallelizeAttribute tem precedência e os bloqueios de recursos declarados não têm efeito: esses testes são executados na fase sequencial e nunca passam pelo agendador paralelo que adquire bloqueios.
Construtores
| Nome | Description |
|---|---|
| DoNotParallelizeAttribute() |
Exclui um teste, uma classe de teste ou um assembly de teste da paralelização no assembly. Os testes afetados nunca são executados simultaneamente com qualquer outro teste na mesma origem de teste e, quando a paralelização está habilitada, são adiados para serem executados sequencialmente após a conclusão de cada teste paralelizável nessa origem. |