CA2002 : Ne définissez pas un verrou sur des objets à identité faibleCA2002: Do not lock on objects with weak identity

TypeNameTypeName DoNotLockOnObjectsWithWeakIdentityDoNotLockOnObjectsWithWeakIdentity
CheckIdCheckId CA2002CA2002
CategoryCategory Microsoft.ReliabilityMicrosoft.Reliability
Modification avec ruptureBreaking Change Sans ruptureNon-breaking

CauseCause

Un thread tente d’acquérir un verrou sur un objet qui a une identité faible.A thread attempts to acquire a lock on an object that has a weak identity.

Description de la règleRule description

Un objet est dit d'identité faible lorsqu'il est accessible directement au-delà des limites d'un domaine d'application.An object is said to have a weak identity when it can be directly accessed across application domain boundaries. Un thread qui essaie d'acquérir un verrou sur un objet qui affiche une identité faible peut être bloqué par un deuxième thread dans un domaine d'application différent qui dispose d'un verrou sur le même objet.A thread that tries to acquire a lock on an object that has a weak identity can be blocked by a second thread in a different application domain that has a lock on the same object.

Les types suivants ont une identité faible et sont signalés par la règle :The following types have a weak identity and are flagged by the rule:

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, utilisez un objet à partir d’un type qui n’est pas dans la liste dans la section de Description.To fix a violation of this rule, use an object from a type that is not in the list in the Description section.

Quand supprimer les avertissementsWhen to suppress warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

CA2213 : Les champs pouvant être supprimés doivent l’êtreCA2213: Disposable fields should be disposed

ExempleExample

L’exemple suivant montre des verrous d’objets qui enfreignent la règle.The following example shows some object locks that violate the rule.

Imports System
Imports System.IO
Imports System.Reflection
Imports System.Threading

Namespace ReliabilityLibrary

   Class WeakIdentities
   
      Sub SyncLockOnWeakId1()

         SyncLock GetType(WeakIdentities)
         End SyncLock

      End Sub

      Sub SyncLockOnWeakId2() 
      
         Dim stream As New MemoryStream()
         SyncLock stream
         End SyncLock

      End Sub

      Sub SyncLockOnWeakId3() 
       
         SyncLock "string"
         End SyncLock

      End Sub

      Sub SyncLockOnWeakId4() 
       
         Dim member As MemberInfo = _
            Me.GetType().GetMember("SyncLockOnWeakId1")(0)
         SyncLock member
         End SyncLock

      End Sub

      Sub SyncLockOnWeakId5()
      
         Dim outOfMemory As New OutOfMemoryException()
         SyncLock outOfMemory
         End SyncLock

      End Sub

   End Class

End Namespace
using System;
using System.IO;
using System.Reflection;
using System.Threading;

namespace ReliabilityLibrary
{
   class WeakIdentities
   {
      void LockOnWeakId1()
      { 
         lock(typeof(WeakIdentities)) {}
      }

      void LockOnWeakId2() 
      {
         MemoryStream stream = new MemoryStream();
         lock(stream) {} 
      }

      void LockOnWeakId3() 
      { 
         lock("string") {} 
      }

      void LockOnWeakId4() 
      { 
         MemberInfo member = this.GetType().GetMember("LockOnWeakId1")[0];
         lock(member) {} 
      }
      void LockOnWeakId5()
      {
         OutOfMemoryException outOfMemory = new OutOfMemoryException();
         lock(outOfMemory) {}
      }
   }
}

Voir aussiSee also