Можно ли использовать CER, чтобы гарантировать, что финализация никогда не вызывается? - PullRequest
6 голосов
/ 13 марта 2012

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

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

1 Ответ

1 голос
/ 13 марта 2012

Попробуйте разделить код, который зависит от этой нативной зависимости, на автономное приложение-службу Windows, если это возможно. Если он не может хорошо работать с WCF / IIS, вам следует избегать конфликтов, а не бороться с ним.

...