ResourceLockAttribute 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
宣告測試或測試類別在命名共享資源上競爭,使組建內的平行排程器只會將它序列化,與其他宣告相同資源的測試對應,而非強制整個類別或組譯器選擇退出與 的平行化。DoNotParallelizeAttribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=true)]
[System.Runtime.CompilerServices.Nullable(0)]
public sealed class ResourceLockAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=true)]
public sealed class ResourceLockAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=true)>]
[<System.Runtime.CompilerServices.Nullable(0)>]
type ResourceLockAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true, Inherited=true)>]
type ResourceLockAttribute = class
inherit Attribute
Public NotInheritable Class ResourceLockAttribute
Inherits Attribute
- 繼承
-
ResourceLockAttribute
- 屬性
備註
該資源由自由形式的不透明字串鍵碼識別。 兩個鎖當且僅當它們 Resource 的字串相等時,透過序數、大小寫區分比較,才會引用相同的資源。 金鑰是識別碼,而非路徑:它們之間不會推斷出階層關係(例如 C:\out 和 C:\out\sub 是無關的金鑰)。 偏好 const 欄位,且 WellKnownResources 多於內嵌字串字面值,使打字錯誤成為編譯錯誤而非靜默競賽。
鎖定範圍僅為目前的測試主機程序。 此屬性不跨程序或機器協調,因此平行 dotnet test 調用不會互相排斥。
鎖是在排程區塊開始前取得,區塊結束後解除,因此決定鎖被保留的時間,而非個別測試方法。 區塊的組成取決於 Scope:
在(預設)下 ClassLevel ,區塊是整個類別,因此類別層級鎖定只需一次,並在該類別中所有測試中持續持有,跨度與 [ClassInitialize][ClassCleanup]。 區塊的鎖是類別與每個方法宣告的鍵的合併,每個鍵都升級到類別中宣告的最強模式——因此在此範圍內,宣告個別方法鎖並不會讓鎖定變得更細緻。
區塊下方 MethodLevel 有一個單一測試,因此每個測試會個別套用類別層級的鎖定,並在每次測試中取得與釋放。 其他類別的測試因此可能在該類別的兩個測試之間交錯,且建立於 [ClassInitialize] 該類別的資源不會持續透過 [ClassCleanup]擁有。
在這兩種情況下,覆蓋檢定的鎖都存在於該檢定的 [TestInitialize] 和 [TestCleanup]上。 當一個區塊包含多個鎖時,鎖會依序數排序的鑰匙順序取得,這使得死鎖不可能發生。
若測試也標記 DoNotParallelizeAttribute為 ,該屬性優先,宣告的資源鎖不影響:此類測試在序列階段執行,絕不經過平行排程器取得鎖。
此屬性是繼承的:基底測試類別宣告的鎖適用於所有從該測試類別衍生的類別,匹配 DoNotParallelizeAttribute。 這是保守的方向——一個基礎設施即使接觸到共享資源,仍會從衍生職業中接觸該資源,過度鎖定只是速度變慢,而欠鎖定則產生比賽。 請注意其結果:導出類別無法移除繼承的鎖,也無法削弱繼承 ReadWrite 到的 Read鎖,因此在廣泛使用的基底類別下 ClassLevel ,序列化整個階層結構。 在最需要鎖的衍生型態上宣告鎖。
建構函式
| 名稱 | Description |
|---|---|
| ResourceLockAttribute(String) |
利用ReadWrite存取權限初始化指定資源類別的新實例ResourceLockAttribute。 |
屬性
| 名稱 | Description |
|---|---|
| Mode |
取得或設定該資源的存取模式。 預設為 ReadWrite (排他性)。 設定為 Read 測試只讀取資源時,這樣它才能與其他讀取器同時執行,且只對寫入者進行區塊。 |
| Resource |
取得識別共享資源的不透明金鑰。 使用順序數、大小寫敏感比較。 |