【发布时间】:2008-12-30 12:14:26
【问题描述】:
假设我有一个实现 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 pattern。
更新:非常感谢您的回复。我感谢你的努力。作为chakrithas commented,我需要可以多次调用异步DoSomething。理想情况下,这样的事情应该可以正常工作:
using ( MyClass myClass = new MyClass() ) {
myClass.AsyncDoSomething();
myClass.AsyncDoSomething();
}
我会研究计数信号量,这似乎是我在寻找的东西。也可能是设计问题。如果我觉得方便的话,我将与您分享一些真实案例以及 MyClass 的真正作用。
【问题讨论】:
标签: c# asynchronous dispose