DoNotParallelizeAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wyklucza test, klasę testową lub zestaw testowy z równoległego przetwarzania w zestawie. Testy, których dotyczy problem, nigdy nie są uruchamiane współbieżnie z żadnym innym testem w tym samym źródle testowym i po włączeniu przetwarzania równoległego są odroczone do sekwencyjnie po zakończeniu każdego testu równoległego w tym źródle.
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
- Dziedziczenie
-
DoNotParallelizeAttribute
- Atrybuty
Uwagi
Atrybut zapewnia jednocześnie dwie gwarancje, a drugi jest łatwy do przeoczenia:
Wzajemne wykluczanie. Test przewożąc ten atrybut — bezpośrednio lub za pośrednictwem klasy lub zestawu — nigdy nie jest wykonywany w tym samym czasie co jakikolwiek inny test w tym samym źródle. Działa samodzielnie.
Odroczenie. Po włączeniu przetwarzania równoległego w zestawie harmonogram dzieli testy źródła na zestaw równoległy i zestaw niezrównolegalny. Uruchamia cały zestaw równoległy do ukończenia, a następnie uruchamia zestaw niezrówłowagalny — jeden test naraz — na samym końcu uruchomienia tego źródła. Ponieważ partycjonowanie jest na źródło testowe (zestaw), "przebiegi ostatnie" i "uruchomienia same" są gwarancjami względem innych testów w tym samym źródle; uruchomienie obejmujące kilka źródeł ma oddzielny odroczony ogon dla każdego z nich.
To sprawia, że koszt atrybutu jest łatwy do niedoceniania. Odroczony test nie może nakładać się na inny test w tym samym źródle, więc jego czas trwania jest dodawany do ścieżki krytycznej tego źródła, a nie wchłonięty przez równoległe działania wykonywane obok niego. Pojedynczy powolny test przeprowadzający ten atrybut jest zatem nieproporcjonalnie kosztowny w jego źródle: wydłuża przebieg tego źródła przez mniej więcej własny czas trwania, a nawet nigdy nie działa równolegle z żadnym innym testem w źródle. (Nadal może nakładać się na testy z innych źródeł, które mogą być uruchamiane na oddzielnych hostach, więc kosztem jest ścieżka krytyczna źródła, a niekoniecznie do całego przebiegu).
Ponieważ testy odroczone są uruchamiane dopiero po zakończeniu zestawu z możliwością równoległości, uruchomienie, które zostało anulowane lub przerwane w fazie równoległej, może zakończyć się bez wykonywania któregokolwiek z nich: "przebiegi ostatnie" i "może w ogóle nie być uruchamiane po anulowaniu przebiegu wcześniej" są prawdziwe.
Brak efektu w przypadku wyłączenia przetwarzania równoległego. Narzędzie MSTest nie jest domyślnie równoległe; Równoległe włączanie równoległości w zestawie jest wyrażane za pośrednictwem (ParallelizeAttribute[assembly: Parallelize]), równoważnych ustawień uruchamiania MSTestParallelizeScope / MSTestParallelizeWorkers lub właściwości programu MSBuild. Gdy równoległość nie jest włączona, każdy test jest już uruchamiany sekwencyjnie, więc ten atrybut jest inertny — nie ma nic do rezygnacji.
Atrybut można zastosować na trzech poziomach:
- Zestaw — każdy test w zestawie jest wykluczony z przetwarzania równoległego, co odpowiada wyłączeniu równoległego przetwarzania dla tego zestawu.
- Klasa — każdy test w klasie jest wykluczony; testy klasy są uruchamiane sekwencyjnie w fazie odroczonej.
- Metoda — tylko test z adnotacjami jest wykluczony i odroczony; pozostała część jej klasy może nadal działać równolegle.
Jest to gruba kontrola: całkowicie decyduje się na test z równoległości. Jeśli występuje tylko określony zasób udostępniony, preferuj ResourceLockAttributemetodę , która serializuje tylko testy, które deklarują ten sam zasób, zamiast całkowicie wykluczać je z równoległości. Jeśli test prowadzi oba atrybuty, ma pierwszeństwo, DoNotParallelizeAttribute a zadeklarowane blokady zasobów nie mają wpływu: takie testy są uruchamiane w fazie sekwencyjnej i nigdy nie przechodzą przez równoległy harmonogram, który uzyskuje blokady.
Konstruktory
| Nazwa | Opis |
|---|---|
| DoNotParallelizeAttribute() |
Wyklucza test, klasę testową lub zestaw testowy z równoległego przetwarzania w zestawie. Testy, których dotyczy problem, nigdy nie są uruchamiane współbieżnie z żadnym innym testem w tym samym źródle testowym i po włączeniu przetwarzania równoległego są odroczone do sekwencyjnie po zakończeniu każdego testu równoległego w tym źródle. |