Middle+
Para que construção é transformado o operador lock em C#?
sobes.tech IA
Resposta da IA
O operador lock em C# é transformado em chamadas aos métodos Monitor.Enter e Monitor.Exit (ou Monitor.TryEnter com um Monitor.Exit subsequente) num bloco try...finally.
// Código original com lock
object lockObject = new object();
lock (lockObject)
{
// Código protegido
}
// A transformação irá fazer aproximadamente o seguinte:
object lockObject = new object();
bool lockTaken = false; // Flag para rastrear se o monitor foi adquirido
try
{
Monitor.Enter(lockObject, ref lockTaken); // Tentativa de adquirir o monitor
// Pode usar-se Monitor.TryEnter em vez de Monitor.Enter
if (lockTaken) // Verifica se o monitor foi adquirido
{
// Código protegido
}
}
finally
{
if (lockTaken) // Liberta o monitor apenas se foi adquirido
{
Monitor.Exit(lockObject);
}
}
O uso de Monitor.Enter com o parâmetro ref bool lockTaken e um bloco try...finally garante que o monitor será libertado mesmo no caso de uma exceção no código protegido.