Ответ 1
Проблема описана здесь:
Безопасно ли вызывать RCW из финализатора?
и здесь:
Отпустите объект Excel в моем деструкторе
Проблема в том, что не только время, когда эти объекты должны быть неопределенными, но порядок, в котором финализаторы называются также недетерминированными. В этом случае В Runtime Callable Wrapper также есть финализатор, который вызывает Marshal.FinalReleaseComObject сам по себе, который имеет результат уменьшая счетчик ссылок на стороне COM забора, чтобы этот COM-объект может быть выпущен. Но так как порядок, в котором финализаторы называются неопределенными, очень возможно, что финализаторы для COM-объектов, которые будут ссылаться на ваши объекты перед финализатором для вашего объекта. Таким образом, код в вашем финализатор может работать иногда, но в большинстве случаев один или несколько Runtime Callable Wrappers, что ваши ссылки на объекты будут иметь уже были вызваны их финализаторы, и основной объект COM будет были выпущены до того, как ваш финализатор выполнит свой код.