DoNotParallelizeAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Schließt eine Test-, Testklasse oder Testassembly aus der Inassembly-Parallelisierung aus. Betroffene Tests werden niemals gleichzeitig mit einem anderen Test in derselben Testquelle ausgeführt und, wenn die Parallelisierung aktiviert ist, nach Abschluss jedes parallelisierbaren Tests in dieser Quelle sequenziell ausgeführt.
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
- Vererbung
-
DoNotParallelizeAttribute
- Attribute
Hinweise
Das Attribut bietet zwei Garantien auf einmal, und die zweite ist leicht zu übersehen:
Gegenseitiger Ausschluss. Ein Test, der dieses Attribut – direkt oder über seine Klasse oder Assembly – trägt, wird niemals gleichzeitig mit einem anderen Test in derselben Quelle ausgeführt. Es läuft eigenständig.
Verzögerung. Wenn die Inassembly-Parallelisierung aktiviert ist, partitioniert der Planer die Tests einer Quelle in einen parallelisierbaren Satz und einen nicht parallelisierbaren Satz. Er führt zuerst den gesamten parallelisierbaren Satz bis zum Abschluss aus und führt dann den nicht parallelisierbaren Satz – jeweils einen Test – am Ende der Ausführung dieser Quelle aus. Da die Partitionierung pro Testquelle (Assembly) erfolgt, sind "last" und "runs alone" garantien relativ zu den anderen Tests in derselben Quelle; eine Ausführung, die mehrere Quellen umfasst, weist jeweils einen separaten verzögerten Tail auf.
Dies macht die Kosten des Attributs leicht zu unterschätzen. Ein verzögerter Test kann sich nicht mit einem anderen Test in derselben Quelle überlappen, sodass seine Dauer dem kritischen Pfad dieser Quelle hinzugefügt wird, anstatt von parallelen Arbeiten, die parallel ausgeführt werden, aufgenommen wird. Ein einzelner langsamer Test, der dieses Attribut trägt, ist daher unverhältnismäßig teuer in seiner Quelle: Er verlängert die Ausführung dieser Quelle um ungefähr seine eigene Dauer, und zwar nicht parallel zu einem anderen Test in der Quelle. (Es kann sich weiterhin mit Tests aus anderen Quellen überlappen, die möglicherweise in separaten Hosts ausgeführt werden, sodass diese Kosten auf den kritischen Pfad der Quelle und nicht unbedingt auf die gesamte Ausführung zutreffen.)
Da die verzögerten Tests erst ausgeführt werden, nachdem der parallelisierbare Satz abgeschlossen wurde, kann eine Ausführung, die während der parallelisierbaren Phase abgebrochen oder abgebrochen wird, abgeschlossen werden, ohne sie auszuführen: "Wird zuletzt ausgeführt" und "kann gar nicht ausgeführt werden, wenn die Ausführung vorzeitig abgebrochen wird".
Kein Effekt, wenn die Parallelisierung deaktiviert ist. MSTest wird standardmäßig nicht parallelisiert; Die Inassembly-Parallelisierung erfolgt über ParallelizeAttribute ([assembly: Parallelize]), die entsprechenden Ausführungseinstellungen oder die MSTestParallelizeScope / MSTestParallelizeWorkers MSBuild-Eigenschaften. Wenn die Parallelisierung nicht aktiviert ist, wird jeder Test bereits sequenziell ausgeführt, sodass dieses Attribut inert ist – es gibt nichts zu deaktivieren.
Das Attribut kann auf drei Ebenen angewendet werden:
- Assembly – jeder Test in der Assembly wird von der Parallelisierung ausgeschlossen, äquivalent zum Deaktivieren der Parallelisierung für diese Assembly.
- Klasse — jeder Test in der Klasse ist ausgeschlossen; die Tests der Klasse werden sequenziell in der verzögerten Phase ausgeführt.
- Methode – nur der kommentierte Test ist ausgeschlossen und verzögert; der Rest seiner Klasse kann weiterhin parallel ausgeführt werden.
Dies ist eine grobe Kontrolle: Es entscheidet sich ganz für einen Test aus Parallelität. Wenn nur eine bestimmte freigegebene Ressource behauptet wird, bevorzugen ResourceLockAttributeSie diese, die nur die Tests serialisiert, die dieselbe Ressource deklarieren, anstatt sie vollständig aus der Parallelisierung auszuschließen. Wenn ein Test beide Attribute trägt, hat vorrang, DoNotParallelizeAttribute und die deklarierten Ressourcensperren haben keine Auswirkungen: Solche Tests werden in der sequenziellen Phase ausgeführt und durchlaufen niemals den parallelen Scheduler, der Sperren erhält.
Konstruktoren
| Name | Beschreibung |
|---|---|
| DoNotParallelizeAttribute() |
Schließt eine Test-, Testklasse oder Testassembly aus der Inassembly-Parallelisierung aus. Betroffene Tests werden niemals gleichzeitig mit einem anderen Test in derselben Testquelle ausgeführt und, wenn die Parallelisierung aktiviert ist, nach Abschluss jedes parallelisierbaren Tests in dieser Quelle sequenziell ausgeführt. |