c# – 包含线程的类的IDisposable实现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 包含线程的类的IDisposable实现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1315字,纯文字阅读大概需要2分钟。
内容图文
![c# – 包含线程的类的IDisposable实现](/upload/InfoBanner/zyjiaocheng/828/bab2e06b12484fbeaa9801e1f5bbce33.jpg)
早上好!
我们假设我们有以下类:
class MultithreadOperation : IDisposable
{
private IList<Thread> operationThreads;
public void StartOperation()
{
// Initialize and start threads and put them to operationThreads
}
public void StopOperation()
{
// Aborts each thread.
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
disposed = true;
if (disposing)
{
// Release managed resources.
#1:
StopOperation();
}
// Release unmanaged resources.
#2:
StopOperation();
}
}
~MultithreadOperation()
{
Dispose(false);
}
}
实际上,如果实例被丢弃,我需要停止所有线程.此外,如果实例被垃圾收集,我需要停止所有线程(否则,线程将仍然存活,这对我不利).
当然,在#1中调用StopOperation()方法是完全合法的.
我想知道如果我们调用StopOperation()到位#2,是否有任何陷阱?
据我所知,当~MultithreadOperation()执行时,线程列表可能已被垃圾收集.此外,我已经看到很多建议,以避免任何代码引用Finalize实现中的托管资源,尤其是实例字段.
此外,听到有关此问题的不同方法会很有趣.
谢谢!
最佳答案:
这完全不合适.你的类的用户不熟悉细节会假设调用Dispose()会做一些无辜的事情.有点清理,没什么特别的.她不会指望该程序处于一个完全不可预测的状态,线程会在随机位置发生中断而无法恢复状态.
它也是终结器线程上的完整redrum,如果线程不处于可警告状态,则中止线程可能需要很多秒. CLR将在2秒后中止终结器线程并终止程序,根本不提供有关程序崩溃的真正原因的诊断.
内容总结
以上是互联网集市为您收集整理的c# – 包含线程的类的IDisposable实现全部内容,希望文章能够帮你解决c# – 包含线程的类的IDisposable实现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。