Coleta de lixo deve ter removido objeto, mas WeakReference.IsAlive ainda retornando true

Eu tenho um teste que eu esperava passar, mas o comportamento do Garbage Collector não é como eu presumi:

[Test]
public void WeakReferenceTest2()
{
    var obj = new object();
    var wRef = new WeakReference(obj);

    wRef.IsAlive.Should().BeTrue(); //passes

    GC.Collect();

    wRef.IsAlive.Should().BeTrue(); //passes

    obj = null;

    GC.Collect();

    wRef.IsAlive.Should().BeFalse(); //fails
}

Neste exemplo, oobj objeto deve ser GC'd e, portanto, eu esperaria oWeakReference.IsAlive propriedade para retornarfalse.

Parece que porque oobj variável foi declarada no mesmo escopo que aGC.Collect não está sendo coletado. Se eu mover a declaração obj e a inicialização fora do método, o teste passa.

Alguém tem alguma documentação de referência técnica ou explicação para esse comportamento?

questionAnswers(5)

yourAnswerToTheQuestion