Можно ли использовать CER, чтобы гарантировать, что finalize никогда не будет вызываться?

У нас есть очень сложная проблема взаимодействия, когда поток, используемый для инициализации сторонней системы, должен быть тем же потоком, который используется для ее завершения. Невыполнение этого требования приводит к тупиковой ситуации. Мы выполняем взаимодействие из службы WCF, размещенной в IIS. В настоящее время эта очистка сделана в утилизации и обычно работает очень хорошо. К сожалению, при большой нагрузке IIS будет выполнять грубую выгрузку, и мы никогда не сможем вызвать dispose. Мы можем переместить логику выключения в критический финализатор, но это не поможет, поскольку у нас больше нет доступа к инициализирующему потоку! На данный момент нашим единственным выходом, похоже, является уведомление CLR о том, что AppDomain теперь, вероятно, находится в поврежденном состоянии. Однако я не уверен, как это сделать (и если это вообще возможно). Возможно, в этом заключается полезность контрактов на уровне класса, но я признаю, что не совсем понимаю их.

РЕДАКТИРОВАТЬ: В качестве альтернативы это можно рассматривать как проблему сходства потоков в финализаторе. Если у кого-то есть умное решение, я внимательно слушаю :)

6
задан Jeff 13 March 2012 в 14:37
поделиться