Estou revisando um código escrito por um consultor e, embora dezenas de sinalizadores vermelhos já tenham surgido, não consigo entender o seguinte snippet:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
O que lock (new object ()) está fazendo aqui? Não deve ter nenhum efeito, pois está sempre travando em outro objeto, mas esse tipo de travamento é persistente em todo o código, mesmo em partes não copiadas e coladas. É algum caso especial na linguagem C # que é compilado para algo que eu não conheço, ou o programador simplesmente adotou algum culto ao cargo que funcionou algum tempo atrás?
new object()
estava armazenado em um campo e esse campo foi usado naslock()
declarações, e eles não sabiam que era melhor não embuti-lo.