Основные изменения, поэтому комментарии могут показаться неуместными.Приносим извинения за неудобства.
Трудно сказать наверняка.
Если предположить, что код выглядит примерно так
public class SomeType {
private static readonly object Lock = new object();
public void Foo() {
lock (Lock) {
Console.WriteLine("in foo");
GC.Collect(2);
GC.WaitForPendingFinalizers();
GC.Collect(2);
}
}
~SomeType() {
lock (Lock) {
Console.WriteLine("in finalizer");
}
}
}
Вы можете зайти в тупик, если у вас будет больше экземпляров SomeType
поскольку все они разделяют статический объект для блокировки.Вам нужно иметь как минимум один некорневый и несобранный экземпляр SomeType
и вызывать Foo
в другом экземпляре.
Теперь, если у вас нет финализатора, как указано выше, я не вижу, как код мог зайти в тупик.