C#-处置应该做什么-只清理资源或执行一些“业务逻辑”?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-处置应该做什么-只清理资源或执行一些“业务逻辑”?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1413字,纯文字阅读大概需要3分钟。
内容图文
![C#-处置应该做什么-只清理资源或执行一些“业务逻辑”?](/upload/InfoBanner/zyjiaocheng/659/c430347e9a744df99dcf72a694e0fde9.jpg)
这个问题已经在这里有了答案: > Should “Dispose” only be used for types containing unmanaged resources? 15个
考虑到IDisposable的语义,除了清除资源之外,Dispose还应该做什么?
我看到许多类都使用Dispose方法来启动关闭过程和其他一些东西,而不仅仅是进行“资源清理”工作.例如,如果您在类中有一个线程需要关闭,则您是否希望调用Dispose正常关闭该线程?
恕我直言,我将在此对象上实现Stop / Shutdown方法,并在此适当地关闭线程,而在Dispose中,我将检查线程何时仍然存在以简单地在其上调用Abort(暗杀样式:)).
计时器和其他所有资源都可以使用同一示例,这些资源在完成使用该对象之前可以具有某种终止过程.
.NET中相互冲突的设计的两个示例:
> Windows服务的ServiceBase具有OnStop以及Dispose to
覆盖.
> WebApp.从OWIN开始进行自我托管可为您提供
IDisposable,我想该服务会在
处理过程.
解决方法:
与其以IDisposable合同的方式思考,不如将IDisposable视为通用对象合同的一部分,该协议规定对象除IDisposable之外无需其他任何形式的通知.实施IDisposable应该根本不需要任何通知).在可以安全地放弃对象之前,Dispose方法应该执行所有需要做的事情.
唯一有问题的方面是执行清理时可能会发生异常,并且Dispose无法知道在这种情况下应采取的措施.如果在正常(非异常)程序执行期间调用了Dispose,则在清理失败时应抛出异常.但是,如果在从异常平移堆栈时调用它,则它可能抛出的任何异常通常都会破坏所有有关较早异常的证据(因此,使其静默失败比抛出异常要好得多).不幸的是,Dispose无法通过哪种方式确定哪种情况适用,因此在清理失败的情况下,也无法始终如一地做正确的事情.
内容总结
以上是互联网集市为您收集整理的C#-处置应该做什么-只清理资源或执行一些“业务逻辑”?全部内容,希望文章能够帮你解决C#-处置应该做什么-只清理资源或执行一些“业务逻辑”?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。