Mamy bardzo trudny problem z interoperem, w którym wątek używany do inicjowania systemu innej firmy musi być tym samym wątkiem, w którym został przerwany. Nieprzestrzeganie tego spowoduje zakleszczenie. Wykonujemy współdziałanie z usługi WCF hostowanej w IIS. Obecnie to oczyszczanie odbywa się w dyspozycji i zwykle działa bardzo dobrze. Niestety, przy dużym obciążeniu IIS zrobi niegrzeczny rozładunek i nigdy nie zadzwonimy do dispose. Możemy przenieść logikę zamknięcia do krytycznego finalizatora, ale to nie pomaga, ponieważ nie mamy już dostępu do wątku inicjującego! W tym momencie wydaje nam się, że jedynym regresem jest powiadomienie o CLR, że AppDomain jest teraz prawdopodobnie w stanie uszkodzonym. Jednak nie jestem pewien, jak to zrobić (lub jeśli jest to nawet możliwe). Być może jest to użyteczność umów na poziomie klasy, ale przyznaję, że tak naprawdę nie rozumiem ich w pełni.Czy można używać jednostek CER, aby finalizacja nigdy nie była wywoływana?
EDYCJA: Alternatywnie może to być postrzegane jako problem z powinowactwem do gwintów w finalizatorze. Jeśli ktoś ma sprytne rozwiązanie, mam tylko uszy :)
Czy komponent, z którym masz do czynienia, jest natywny czy zarządzany? – JaredPar
Natywny. To jest api do systemu z własnym zarządzaniem pamięcią, itp. – Jeff