说我有一个公开的一类BeginLongOperation(),并EndLongOperation()用标准的方法开始/结束模式,并实现IDisposable.
它是我的课负责处理一个呼叫Dispose()的通话之间BeginLongOperation()和EndLongOperation()?
如果是这样,这样做的正确方法是什么?
我假设 Begin/End 方法是异步的。或者,您的对象可以从另一个线程进行操作。
首先,您需要确定是否确实需要处置类的实例。如果是这样,您需要设计 Dispose() 方法(您的类应该实现IDisposable接口),使其不会干扰正在执行的长操作。好吧,这取决于您想要实施什么策略:您想要等待长操作完成,还是调用 Dispose() 方法应该中断长操作?
通常,您永远不会从类的内部代码中调用 Dispose() 方法,但实际上您需要保护 Dispose() 调用免遭不当使用。
因此,我认为您有责任保护您的代码免受任何可能的情况的影响,甚至防止 Begin 和 End 之间的(不需要的)调用。
稍后编辑:当然,正如这里的其他人告诉你的那样,你的班级用户的责任是正确使用它,但我不会依赖于此。如您所知,当对对象的最后一个引用消失时,您的对象将被垃圾收集。即使在非异步/单线程设计中,这种不良的使用模式确实可以确定在 Start/End 之间对 Dispose() 的调用。