CriticalHandle.ReleaseHandle Método

Definición

Cuando se invalida en una clase derivada, ejecuta el código necesario para liberar el identificador.

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

Devoluciones

true si el identificador se libera correctamente; en caso contrario, si se produce un error grave, false. En este caso, genera un Asistente para depuración administrada releaseHandleFailed.

Comentarios

Se ReleaseHandle garantiza que el método se llame solo una vez, siempre que utilice mecanismos de sincronización adecuados para asegurarse de que solo se realiza una llamada al Close método o Dispose . No ReleaseHandle se llamará al método si la IsInvalid propiedad o IsClosed es true. Implemente este método en CriticalHandle las clases derivadas para ejecutar cualquier código necesario para liberar el identificador. Dado que una de las funciones de CriticalHandle es garantizar la prevención de fugas de recursos, el código de la implementación de ReleaseHandle nunca debe producir un error. El recolector de elementos no utilizados llama ReleaseHandle después de que se hayan ejecutado finalizadores normales para los objetos que se recopilaron como elementos no utilizados al mismo tiempo, y garantiza que los recursos lo invoquen y que no se interrumpirán mientras está en curso. Este método se preparará como una región de ejecución restringida (CER) en el momento de la construcción de la instancia (junto con todos los métodos de su gráfico de llamadas estáticamente determinable). Aunque esto evita interrupciones de anulación de subprocesos, debe tener cuidado de no introducir rutas de acceso de error en el método invalidado ReleaseHandle . En concreto, aplique el ReliabilityContractAttribute atributo a todos los métodos a los que llame desde ReleaseHandle. En la mayoría de los casos, este código debe ser:

ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)

Además, para una limpieza sencilla (por ejemplo, llamar a la API CloseHandle de Windows en un identificador de archivo), puede comprobar el valor devuelto de la llamada de invocación de plataforma única. En el caso de la limpieza compleja, es posible que tenga una gran cantidad de lógica de programa y muchas llamadas de método, algunas de las cuales podrían producir un error. Debe asegurarse de que la lógica del programa tiene código de reserva para cada uno de esos casos.

Si el ReleaseHandle método devuelve false por cualquier motivo, genera un asistente para depuración administrada releaseHandleFailed .

Se aplica a

Consulte también