컨설턴트가 작성한 일부 코드를 검토 중이며 이미 수십 개의 위험 신호가 나타 났지만 다음 스 니펫에 머리를 감쌀 수는 없습니다.
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
여기서 lock (new object ())은 무엇입니까? 항상 다른 객체를 잠그기 때문에 아무 효과가 없어야하지만 이러한 유형의 잠금은 복사 및 붙여 넣기가 아닌 부분에서도 코드 전체에서 지속됩니다. 이것은 내가 모르는 것으로 컴파일 된 C # 언어의 특별한 경우입니까, 아니면 프로그래머가 얼마 전에 작동했던화물 컬트를 채택한 것일까 요?
new object()
필드에 저장된 곳을 보았을 것이고 그 필드가lock()
명령문 에 사용되었으며 인라인하지 않는 것이 더 낫다는 것을 알지 못했습니다.