Abbiamo un problema di interoperabilità molto complesso in cui il thread utilizzato per inizializzare un sistema di terze parti deve essere lo stesso thread utilizzato per terminarlo. In caso contrario, si verificherà un deadlock. Stiamo eseguendo l'interoperabilità da un servizio WCF ospitato in IIS. Attualmente questa pulizia è a disposizione e normalmente funziona molto bene. Sfortunatamente, sotto carico pesante IIS eseguirà uno scarico maleducato e non potremo mai chiamare il dispose. Possiamo spostare la logica di spegnimento in un finalizzatore critico, ma ciò non aiuta poiché non abbiamo più accesso al thread di inizializzazione! A questo punto, la nostra unica richiesta sembra essere la notifica al CLR che l'AppDomain è ora probabilmente in uno stato danneggiato. Tuttavia, non sono sicuro di come farlo (o se è anche possibile). Può essere che questa sia l'utilità dei contratti a livello di classe, ma ammetto che non li capisco veramente.È possibile utilizzare CER per garantire che la finalizzazione non venga mai chiamata?
MODIFICA: In alternativa, questo può essere visualizzato come problema di affinità del thread nel finalizzatore. Se qualcuno ha una soluzione intelligente, io sono tutto orecchie :)
Il componente con cui si ha a che fare è nativo o gestito? – JaredPar
Nativo. È un sistema per la gestione della memoria, ecc. – Jeff