【发布时间】:2012-02-08 21:36:29
【问题描述】:
我愿意
Monitor.Enter(this.StaticLock);
try
{
// Do something ...
ThreadPool.QueueUserWorkItem(state =>
{
try
{
// Do something else...
}
finally
{
Monitor.Exit(this.StaticLock);
}
});
}
catch (Exception)
{
Monitor.Exit(this.StaticLock);
throw;
}
但它不起作用,因为它不能 Monitor.Exit 在当前线程中不是 Monitor.Enter 的对象上。怎么做?我应该使用线程间通信吗?
【问题讨论】:
-
你可能做错了什么。这有什么用例?
-
为什么不把
Monitor.Enter放在工作项里面? -
有什么原因不能锁定 queueUserWorkItem 委托中的对象? (如果需要,您可以锁定然后解锁该项目,以便在排队项目之前发生 /*做某事*/。)
-
下面的catch块只会在ThreadPool.QueueUserWorkItem引发异常时引发,而不是里面的代码......
-
catch 块只会在 QueueUserWorkItem 引发异常时引发,你有一个设计问题,你应该按照@yahia 所说的那样锁定工作项,
标签: c# .net multithreading concurrency locking