CriticalHandle.ReleaseHandle Méthode

Définition

En cas de substitution dans une classe dérivée, exécute le code nécessaire pour libérer le handle.

protected:
 abstract bool ReleaseHandle();
protected abstract bool ReleaseHandle ();
abstract member ReleaseHandle : unit -> bool
Protected MustOverride Function ReleaseHandle () As Boolean

Retours

true si la libération du handle réussit ; sinon, dans le cas d’un échec catastrophique, false. Dans ce cas, elle génère un Assistant Débogage managé releaseHandleFailed.

Remarques

La ReleaseHandle méthode est garantie d’être appelée une seule fois, à condition d’utiliser des mécanismes de synchronisation appropriés pour garantir qu’un seul appel à la Close méthode ou Dispose est effectué. La ReleaseHandle méthode n’est pas appelée si la IsInvalid propriété ou IsClosed est true. Implémentez cette méthode dans vos CriticalHandle classes dérivées pour exécuter tout code requis pour libérer le handle. Étant donné que l’une des fonctions de est de CriticalHandle garantir la prévention des fuites de ressources, le code de votre implémentation de ReleaseHandle ne doit jamais échouer. Le garbage collector appelle ReleaseHandle après que les finaliseurs normaux ont été exécutés pour les objets qui ont été collectés en même temps, et garantit que les ressources l’appellent et qu’il ne sera pas interrompu pendant qu’il est en cours. Cette méthode sera préparée en tant que région d’exécution contrainte (CER) au moment de la construction de l’instance (avec toutes les méthodes de son graphique d’appel statiquement déterminable). Bien que cela empêche les interruptions d’interruption de thread, vous devez tout de même veiller à ne pas introduire de chemins d’erreur dans votre méthode remplacée ReleaseHandle . En particulier, appliquez l’attribut à toutes les ReliabilityContractAttribute méthodes que vous appelez à partir de ReleaseHandle. Dans la plupart des cas, ce code doit être :

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

En outre, pour un nettoyage simple (par exemple, l’appel de l’API CloseHandle Windows sur un handle de fichier), vous pouvez vérifier la valeur de retour pour l’appel d’appel de plateforme unique. Pour le nettoyage complexe, vous pouvez avoir beaucoup de logique de programme et de nombreux appels de méthode, dont certains peuvent échouer. Vous devez vous assurer que votre logique de programme dispose d’un code de secours pour chacun de ces cas.

Si la ReleaseHandle méthode retourne false pour une raison quelconque, elle génère un Assistant débogage managé releaseHandleFailed .

S’applique à

Voir aussi