假设我有一个一次性类型:
class MyDisposable : IDisposable
{
public void Dispose() { }
}
然后我希望每个线程都有自己的此类的本地副本,每个线程一个:
private readonly ThreadLocal<MyDisposable> localMyDisposable
= new ThreadLocal<MyDisposable>(() => new MyDisposable());
现在我想确保 在线程退出之前,我对值调用 Dispose()
(如果它已创建)。有什么办法吗?我的应用程序中的某些线程存在时间很短,而有些线程存在时间很长。我想确保任何短命的人都放弃他们的值(value)观。
最佳答案
CLR 中没有钩子(Hook)来通知线程退出。线程本地值最终将被 GC 删除,但您似乎对快速处置感兴趣。
唯一的方法是让线程自己执行清理。
如果您使用任务而不是线程,您可以为该任务附加一个延续,并确保资源在任务完成后被清理和重置。但是,您不能在此处使用 ThreadLocal
,因为永远无法保证延续在同一线程上运行。
关于c# - 线程退出时如何处理 ThreadLocal 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432759/