Я только что заметил что-то действительно странное в отношении сбора мусора.
Метод WeakRef собирает объект, как ожидалось, в то время как метод async сообщает, что объект все еще жив, хотя мы вынудили сборку мусора. Любые идеи, почему?
class Program
{
static void Main(string[] args)
{
WeakRef();
WeakRefAsync().Wait();
}
private static void WeakRef()
{
var foo = new Foo();
WeakReference fooRef = new WeakReference(foo);
foo = null;
GC.Collect();
Debug.Assert(!fooRef.IsAlive);
}
private static async Task WeakRefAsync()
{
var foo = new Foo();
WeakReference fooRef = new WeakReference(foo);
foo = null;
GC.Collect();
Debug.Assert(!fooRef.IsAlive);
}
}
public class Foo
{
}