如何编写互斥方法和Dispose?

时间:2017-04-06 11:32:53

标签: c# idisposable mutual-exclusion

简而言之 - 想想Threading.Timer及其专门方法DisposeWaitHandle为参数。在我的情况下,我必须更进一步,我必须定期编写,无参数,但仍在等待,Dispose

故事

假设我有一个实现此类界面的类型Foo

interface IFoo : IDisposable
{
  void Action1();
  Task Action2Async();
}

Foo类型的用户可以同时Action1同时Action2拨打Dispose

当调用Dispose时,它应将当前实例标记为已释放并等待所有当前操作结束。然后应该继续处置。

常规方法应该检查实例是否被处置,如果是,他们应该静默退出或抛出异常 - 关键是他们不应该继续实际操作。

想法

我想通了,一个bool标志和CountdownEvent应该足够了 - 当调用方法时我会增加计数器,在退出时减少它,在实现Dispose时我只需调用{{1这将告诉我所有方法是否已完成执行。

但是抓住了,WaitCountdownEvent,所以我也应该处理它,所以我无法在方法中使用它。

好的,所以我编写了自定义类型包装IDiposable,因为我需要一些内存屏障,所以我可以使用CountdownEvent。但是...... ReaderWriterLockSlim也是ReaderWriterLockSlim

当然,我可以使用常规IDisposable但方法调用和Dispose调用比率为N:1。

问题

那么如何编写互斥方法和Dispose?

0 个答案:

没有答案