DoNotParallelizeAttribute Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esclude un assembly di test, una classe di test o un assembly di test dalla parallelizzazione in-assembly. I test interessati non vengono mai eseguiti simultaneamente con altri test nella stessa origine di test e, quando la parallelizzazione è abilitata, vengono posticipati per l'esecuzione sequenziale dopo il completamento di ogni test parallelizzabile in tale origine.
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
- Ereditarietà
-
DoNotParallelizeAttribute
- Attributi
Commenti
L'attributo offre due garanzie contemporaneamente e il secondo è facile da ignorare:
Esclusione reciproca. Un test che trasporta questo attributo, direttamente o tramite la relativa classe o il relativo assembly, non viene mai eseguito contemporaneamente a qualsiasi altro test nella stessa origine. Funziona da solo.
Rinvio. Quando la parallelizzazione in assembly è abilitata, l'utilità di pianificazione partiziona i test di un'origine in un set parallelizzabile e un set non parallelizzabile. Esegue prima l'intero set parallelizzabile al completamento e quindi esegue solo il set non parallelizzabile, un test alla volta, alla fine dell'esecuzione dell'origine. Poiché il partizionamento è per origine di test (assembly), "esecuzioni ultime" e "esecuzioni da sole" sono garanzie relative agli altri test nella stessa origine; un'esecuzione che si estende su più origini ha una coda posticipata separata per ognuna di esse.
Ciò rende il costo dell'attributo facile da sottovalutare. Un test posticipato non può sovrapporsi a qualsiasi altro test nella stessa origine, quindi la sua durata viene aggiunta al percorso critico dell'origine anziché assorbito dal lavoro parallelo che avviene insieme a esso. Un singolo test lento che trasporta questo attributo è quindi sproporzionatamente costoso all'interno della sua origine: si allunga l'esecuzione dell'origine per una durata approssimativamente propria, oltre a non essere mai in esecuzione in parallelo con qualsiasi altro test nell'origine. Può comunque sovrapporsi ai test provenienti da altre origini, che possono essere eseguiti in host separati, quindi questo costo riguarda il percorso critico dell'origine anziché necessariamente l'intera esecuzione.
Poiché i test posticipati vengono eseguiti solo al termine del set parallelizzabile, un'esecuzione annullata o interrotta durante la fase parallelizzabile può essere completata senza eseguirne alcuna: "esecuzioni ultime" e "potrebbero non essere eseguite affatto quando l'esecuzione viene annullata in anticipo" sono entrambe vere.
Nessun effetto quando la parallelizzazione è disattivata. MSTest non parallelizza per impostazione predefinita; La parallelizzazione in-assembly è esplicita tramite ParallelizeAttribute ([assembly: Parallelize]), le impostazioni di esecuzione equivalenti o le MSTestParallelizeScope / MSTestParallelizeWorkers proprietà MSBuild. Quando la parallelizzazione non è abilitata per tutti i test già eseguiti in sequenza, quindi questo attributo è inerte. Non c'è nulla da rifiutare esplicitamente.
L'attributo può essere applicato a tre livelli:
- Assembly : ogni test nell'assembly viene escluso dalla parallelizzazione, equivalente alla disabilitazione della parallelizzazione per tale assembly.
- Classe : ogni test nella classe viene escluso; i test della classe vengono eseguiti in sequenza nella fase posticipata.
- Metodo : solo il test con annotazioni è escluso e posticipato; il resto della classe può comunque essere eseguito in parallelo.
Si tratta di un controllo grossolano: opta per un test del parallelismo completamente. Quando viene eseguita una sola risorsa condivisa specifica, preferire ResourceLockAttribute, che serializza solo i test che dichiarano la stessa risorsa anziché escluderli completamente dalla parallelizzazione. Se un test contiene entrambi gli attributi, DoNotParallelizeAttribute ha la precedenza e i blocchi di risorse dichiarati non hanno alcun effetto: tali test vengono eseguiti nella fase sequenziale e non passano mai attraverso l'utilità di pianificazione parallela che acquisisce i blocchi.
Costruttori
| Nome | Descrizione |
|---|---|
| DoNotParallelizeAttribute() |
Esclude un assembly di test, una classe di test o un assembly di test dalla parallelizzazione in-assembly. I test interessati non vengono mai eseguiti simultaneamente con altri test nella stessa origine di test e, quando la parallelizzazione è abilitata, vengono posticipati per l'esecuzione sequenziale dopo il completamento di ogni test parallelizzabile in tale origine. |