在锁结构中使用异步操作是一种好的编程习惯吗?例如,
lock(objLocker)
{
myDispatchder.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Render,
new Action(() =>
{
// ..code..
}
}
在锁结构中使用异步操作是一种好的编程习惯吗?例如,
lock(objLocker)
{
myDispatchder.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Render,
new Action(() =>
{
// ..code..
}
}
如果这是您唯一要保护的东西,那将是多余的;没有必要lock
for BeginInvoke
。实际上,如果是,那将是非常有害Invoke
的,并且名为 (the // ..code..
)的方法也试图锁定objLocker
- 你会自己死锁。目前,它没有任何用处,并且有可能对 3 个维护版本造成伤害。在更一般的情况下,如果有需要保护的东西,我会将这两个任务分开,即
lock(objLocker)
{
// do some stuff
}
myDispatcher.BeginInvoke(...);
这样可以避免以后出现任何潜在问题。
a 中的异步操作lock
除了无缘无故地使代码更加复杂并引入可能的死锁之外,什么都不做。
给出您的代码示例,我可以建议以下内容可能更有用:
myDispatchder.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Render,
new Action(() =>
{
lock(objLocker)
{
// ..code..
}
}));