gpt4 book ai didi

C#:正确释放线程

转载 作者:行者123 更新时间:2023-11-30 20:14:08 24 4
gpt4 key购买 nike

我有一个抽象类,它在其构造函数中生成一个无限循环线程。什么是确保在类完成使用时中止该线程的最佳方法?

我是否应该实现 IDisposable 并简单地使用它?

public void Dispose()
{
this.myThread.Abort();
}

我读到 Abort() 是邪恶的。我是否应该改为让 Dispose() 设置一个私有(private) bool 标志,线程检查该标志是否为 true 以退出其循环?

public void Dispose()
{
this.abort = true;
}

//在线程的循环中...

if (this.abort)
{
break;
}

改用 BackgroundWorker 类?

最佳答案

我想扩展“lc”提供的答案(否则就很棒)。

要使用他的方法,您还需要将 bool 标志标记为“volatile”。这将引入一个“内存屏障”,它将确保每次您的后台线程读取变量时,它都会从内存中获取它(而不是寄存器),并且当变量被写入时,数据会在 CPU 缓存之间传输.

关于C#:正确释放线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/837591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com