考虑到IDisposable的语义,除了清理资源之外,Dispose方法应该做什么?
我发现许多类使用Dispose方法来启动关闭进程和其他一些操作,而不仅仅是进行“资源清理”工作。例如,如果您在类中有一个需要关闭的线程,您是否希望调用Dispose时能够优雅地关闭这个线程?
在我看来,我会在对象上实现一个Stop / Shutdown方法,并在那里优雅地关闭线程,而在Dispose中,我会检查线程是否仍然存活,然后简单地调用Abort方法(暗杀式 :))。
同样的例子也可以用于定时器和所有其他资源,在完成对象的工作之前都可以有某种终止过程。
.NET中两个设计上的冲突示例:
- ServiceBase用于Windows服务,具有OnStop和Dispose可重写。 - OWIN的WebApp.Start用于自托管,返回一个IDisposable,我猜想它在Dispose过程中执行服务关闭。
我发现许多类使用Dispose方法来启动关闭进程和其他一些操作,而不仅仅是进行“资源清理”工作。例如,如果您在类中有一个需要关闭的线程,您是否希望调用Dispose时能够优雅地关闭这个线程?
在我看来,我会在对象上实现一个Stop / Shutdown方法,并在那里优雅地关闭线程,而在Dispose中,我会检查线程是否仍然存活,然后简单地调用Abort方法(暗杀式 :))。
同样的例子也可以用于定时器和所有其他资源,在完成对象的工作之前都可以有某种终止过程。
.NET中两个设计上的冲突示例:
- ServiceBase用于Windows服务,具有OnStop和Dispose可重写。 - OWIN的WebApp.Start用于自托管,返回一个IDisposable,我猜想它在Dispose过程中执行服务关闭。