我正在审查一些顾问编写的代码,虽然已经弹出了数十个红旗,但我无法围绕以下片段进行讨论:
private void foo()
{
if (InvokeRequired)
{
lock (new object())
{
if (m_bar!= null)
Invoke(new fooDelegate(foo), new object[] { });
}
}
else
{
if(OnBazChanged != null)
OnBazChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
什么是锁(新对象())在这做什么?应该没有任何影响,因为它始终锁定在另一个对象上,但这种锁定在整个代码中都是持久的,即使在非复制粘贴的部分也是如此.这是C#语言中的一些特殊情况,编译成我不知道的东西,还是程序员只是采用了一些恰好在前一段时间工作的货物崇拜?
cjk*_*cjk 82
如果有人看到这个,我不会感到惊讶:
private readonly object lockObj = new object();
private void MyMethod()
{
lock(lockObj)
{
// do amazing stuff, so amazing it can only run once at a time
// e.g. comands on the Mars Rover, or programs on iOS pre 4 / 5 ??
}
}
Run Code Online (Sandbox Code Playgroud)
并认为他可以削减线数.
如果情况确实如此,我会非常担心......
归档时间: |
|
查看次数: |
3912 次 |
最近记录: |