gpt4 book ai didi

.net - 在AppDomain中终止任何托管线程时,可以调用任意代码吗?

转载 作者:行者123 更新时间:2023-12-04 22:57:43 27 4
gpt4 key购买 nike

考虑用C#编写的类库,该类库在其某些类上使用线程特定的字段。当线程终止时,类库需要清除数据。

namespace MySdk
{
public class MyClass
{
[ThreadStatic]
private static SomeData _data;

public static SomeData Data
{
get
{
if(_data == null)
{
_data = new SomeData();
}
return _data;
}
}

public static void FreeSomeData()
{
// Release _data
}

// some other useful data which uses _data

}
}

每当托管线程在当前AppDomain中终止时,是否可以调用FreeSomeData?由于使用该类库的应用程序很复杂,因此在线程结束之前显式调用该方法可能是不切实际的。由于间接层的原因,启动线程的代码甚至可能不知道该类库的存在。

在 native 代码中,我应该在 DllMain中完成此操作,然后检查 fdwReason中的 DLL_THREAD_DETACH

非常感激。

最佳答案

SomeData应该有一个终结器,可以清理资源。

如果需要确定性清除,那么没有简单的解决方案。可能会滥用概要分析API来提供您所需的内容,但是让SomeData实现IDisposable并将责任推给客户端会容易得多。

关于.net - 在AppDomain中终止任何托管线程时,可以调用任意代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6039220/

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