using System.Threading.Tasks;
using System.Runtime.CompilerServices;
using System.Collections.Generic;
private static List<WeakReference> _refs = [];
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
public static async Task Main()
for (var i = 0; i < 2; i++)
await ProcessMessagesCycleImplAsync();
Console.WriteLine("GC starting");
GC.WaitForPendingFinalizers();
Console.WriteLine("GC finished");
GC.Collect(0, GCCollectionMode.Forced);
GC.Collect(1, GCCollectionMode.Forced);
GC.Collect(2, GCCollectionMode.Forced);
for (var i = 0; i < _refs.Count; i++)
Console.WriteLine($"_ref1[{i}].IsAlive = {_refs[i].IsAlive}");
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private static async Task ProcessMessagesCycleImplAsync()
_refs.Add(new WeakReference(obj));
await ProcessMessages(obj);
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private static async Task ProcessMessages(Class1 obj)
await RunWithRetriesAsync(
[MethodImpl(MethodImplOptions.AggressiveOptimization)]
private static async Task RunWithRetriesAsync<T>(Func<T, Task> func, T t)