CriticalHandle.ReleaseHandle Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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 que vous employiez des mécanismes de synchronisation appropriés pour vous assurer qu’un seul appel à la Close méthode ou est Dispose 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 dans votre implémentation de ReleaseHandle ne doit jamais échouer. Le récupérateur de mémoire 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 aux ressources de l’appeler 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 instance construction (avec toutes les méthodes de son graphique d’appel statiquement déterminable). Bien que cela empêche les interruptions d’abandon 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 ReliabilityContractAttribute à toutes les 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 case activée 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour