Сборщик мусора .NET "состояние гонки" - PullRequest
1 голос
/ 09 марта 2012

Учитывая следующий сценарий с использованием C #:

Someclass lInstance = new SomeClass();
System.WeakReference lWInstance = new System.WeakReference(lInstance);

lInstance = null;

System.GC.Collect();
System.GC.SuppressFinalize(lWInstance.Target);

Представьте, что при выполнении SuppressFinalize поток GC уже находится внутри кода финализатора Someclass.

Вопрос в том, что произойдет?Я предполагаю, что как только поток GC вошел в финализатор, подавление не имеет никакого эффекта.

1 Ответ

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

Я бы ожидал, что lWInstance.Target будет нулевым, если выполняется финализатор lInstance. То есть что WeakReference будет возвращать только ссылку на действительную, не завершенную цель.

...