我正在评论一些代码,其中一个代码分析(fxCop)警告让我非常困惑。该代码通过在课程开始创建变量实现几个mutex的,与此类似:互斥体是否正确实施,我该如何处置它?
private Mutex myMutex = new Mutex();
的FxCop与一条消息,说我必须实现IDisposable的类作为互斥类实现弹出它 - 这是警告CA1001。然而看着Mutex它没有处理方法。
原来Mutex使用SafeWaitHandle(它实现了IDisposable - 猜测这是fxCop正在拾取的东西),但互斥并不实际通过标准的一次性模式处置它。它有一个使用RuntimeHelpers.CleanupCode分配给代理的私有方法,据我了解这意味着它将运行在异常情况下。
这带来了两个问题:
- 是互斥正确实施?如果互斥体中没有异常,那么SafeWaitHandle将永远不会被丢弃。
- 我应该怎样称呼我清理互斥锁?
卫生署,当然它确实:)我看到齿轮转身这是有意义的时刻。 – 2009-09-25 14:33:01