Рассмотрим библиотеку классов, написанную на 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
}
}
Есть ли способ вызывать FreeSomeData всякий раз, когда управляемый поток завершается в текущем домене приложения? Из-за сложности приложений, использующих эту библиотеку классов, может быть нецелесообразно явно вызывать метод до завершения потока. Код, запускающий потоки, может даже не знать, что эта библиотека классов существует из-за уровней косвенности.
В нативном коде я сделал бы это в DllMain и проверил fdwReason
для DLL_THREAD_DETACH
.
Очень ценится.