gpt4 book ai didi

c# - 线程退出时如何处理 ThreadLocal 值?

转载 作者:太空狗 更新时间:2023-10-29 23:07:27 24 4
gpt4 key购买 nike

假设我有一个一次性类型:

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/

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