DoNotParallelizeAttribute Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Exclut un test, une classe de test ou un assembly de test de la parallélisation dans l’assembly. Les tests affectés ne s’exécutent jamais simultanément avec n’importe quel autre test dans la même source de test et, lorsque la parallélisation est activée, sont différés pour s’exécuter de manière séquentielle après chaque test parallélisable dans cette source.
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
- Héritage
-
DoNotParallelizeAttribute
- Attributs
Remarques
L’attribut fournit deux garanties à la fois, et la seconde est facile à ignorer :
Exclusion mutuelle. Un test portant cet attribut ( directement, ou via sa classe ou son assembly) n’est jamais exécuté en même temps que tout autre test dans la même source. Elle s’exécute elle-même.
Report. Lorsque la parallélisation dans l’assembly est activée, le planificateur partitionne les tests d’une source en un jeu parallélisable et un ensemble non parallélisable. Il exécute l’ensemble de l’ensemble parallélisable à la fin d’abord, puis exécute uniquement l’ensemble non parallélisable ( un test à la fois) à la fin de l’exécution de cette source. Étant donné que le partitionnement est par source de test (assembly), les « exécutions en dernier » et les « exécutions seules » sont des garanties par rapport aux autres tests de cette même source ; une exécution qui s’étend sur plusieurs sources a une queue différée distincte pour chacune d’elles.
Cela rend le coût de l’attribut facile à sous-estimer. Un test différé ne peut pas chevaucher d’autres tests dans la même source, de sorte que sa durée est ajoutée au chemin critique de cette source plutôt que d’être absorbé par des travaux parallèles qui se produisent en même temps. Un seul test lent portant cet attribut est donc disproportionnée au sein de sa source : il allonge l’exécution de cette source par environ sa propre durée, en plus de ne jamais s’exécuter en parallèle avec n’importe quel autre test dans la source. (Il peut toujours chevaucher les tests d’autres sources, qui peuvent s’exécuter dans des hôtes distincts, de sorte que ce coût est lié au chemin critique de la source plutôt qu’à l’exécution entière.)
Étant donné que les tests différés s’exécutent uniquement une fois l’ensemble parallélisable terminé, une exécution annulée ou abandonnée pendant la phase parallélisable peut se terminer sans exécuter l’une d’entre elles : « les exécutions en dernier » et « ne peuvent pas s’exécuter du tout lorsque l’exécution est annulée tôt » sont toutes deux vraies.
Aucun effet lorsque la parallélisation est désactivée. MSTest ne parallélise pas par défaut ; la parallélisation in-assembly est opt-in via ParallelizeAttribute (), les paramètres d’exécution équivalents ou les MSTestParallelizeScope / MSTestParallelizeWorkers propriétés MSBuild.[assembly: Parallelize] Lorsque la parallélisation n’est pas activée, chaque test s’exécute déjà de manière séquentielle, de sorte que cet attribut est inerte , il n’y a rien à refuser.
L’attribut peut être appliqué à trois niveaux :
- Assembly : chaque test de l’assembly est exclu de la parallélisation, ce qui équivaut à désactiver la parallélisation pour cet assembly.
- Classe : chaque test de la classe est exclu ; les tests de la classe s’exécutent séquentiellement dans la phase différée.
- Méthode : seul le test annoté est exclu et différé ; le reste de sa classe peut toujours s’exécuter en parallèle.
Il s’agit d’un contrôle grossière : il opte entièrement pour un test de parallélisme. Quand seule une ressource partagée spécifique est prise en charge, préférez ResourceLockAttribute, qui sérialise uniquement les tests qui déclarent la même ressource au lieu de les exclure complètement de la parallélisation. Si un test comporte les deux attributs, DoNotParallelizeAttribute est prioritaire et que les verrous de ressources déclarés n’ont aucun effet : ces tests s’exécutent dans la phase séquentielle et ne passent jamais par le planificateur parallèle qui acquiert des verrous.
Constructeurs
| Nom | Description |
|---|---|
| DoNotParallelizeAttribute() |
Exclut un test, une classe de test ou un assembly de test de la parallélisation dans l’assembly. Les tests affectés ne s’exécutent jamais simultanément avec n’importe quel autre test dans la même source de test et, lorsque la parallélisation est activée, sont différés pour s’exécuter de manière séquentielle après chaque test parallélisable dans cette source. |