假设我有一个实现IDisposable接口的类。像这样的东西:
MyClass使用一些非托管资源,因此IDisposable的Dispose()方法会释放这些资源。MyClass应该像这样使用:
using ( MyClass myClass = new MyClass() ) {
myClass.DoSomething();
}
现在,我想实现一个异步调用DoSomething()的方法。我向MyClass添加了一个新方法:
现在,从客户端来看,MyClass应该像这样使用:
using ( MyClass myClass = new MyClass() ) {
myClass.AsyncDoSomething();
}
但是,如果我不做任何其他事情,这可能会失败,因为对象myClass可能在调用DoSomething()之前被释放(并抛出意外的ObjectDisposedException)。因此,对Dispose()方法的调用(隐式或显式)应该延迟到对DoSomething()的异步调用完成。
我认为Dispose()方法中的代码应该以异步方式执行,并且只有在所有异步调用都被解决后。我想知道这可能是实现这一目标的最佳方式。
谢谢。
注意:为了简单起见,我没有详细介绍 Dispose() 方法是如何实现的。在现实生活中,我通常遵循Dispose 模式。
更新:非常感谢您的回复。我感谢你的努力。正如chakrit 所评论的,我需要对异步 DoSomething 进行多次调用。理想情况下,这样的事情应该可以正常工作:
using ( MyClass myClass = new MyClass() ) {
myClass.AsyncDoSomething();
myClass.AsyncDoSomething();
}
我会研究计数信号量,这似乎是我在寻找的东西。这也可能是设计问题。如果我觉得方便,我将与您分享一些真实案例以及MyClass的真正作用。