Język

DoNotParallelizeAttribute Klasa

Definicja

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.

Dotyczy