在我的 MVC 3 C# 应用程序中,我有一些静态对象,我希望一次可用于一个请求。只能通过方法访问它,但我希望在调用其方法之间保持锁定。
调用仅在控制器中完成,通常会有一两个锁定的代码块。
起初我想公开一些静态公共对象并像这样使用它
lock(MyClass.lockObject)
{
MyClass.doStuff();
MyClass.doStuff2();
}
Run Code Online (Sandbox Code Playgroud)
,但我发现它很容易出错,因为我可能会忘记将其锁定在某个地方。Monitor.Enter()我想知道在构造函数和Dispose 方法中使用它是否是正确的方法Monitor.Exit(),然后将我的方法更改为非静态?比如说:
public class MyClass:IDisposable
{
static protected object _locker = new object();
protected bool isDisposed = false;
public MyClass()
{
Monitor.Enter(_locker);
}
public void Dispose()
{
if (!isDisposed)
{
Monitor.Exit(_locker);
GC.SuppressFinalize(this);
isDisposed = true;
}
}
~SPInstances()
{
Dispose();
}
public void doStuff()
{
if(isDisposed) throw new ObjectDisposedException();
// do stuff here, etc.
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以将它用作:
using(MyClass myinstance = new MyClass())
{
myInstance.doStuff(); …Run Code Online (Sandbox Code Playgroud)