private static void WeakSample() { var context = new WeakContext(); var weakDelegate = ((Action)context.Count).GetWeak(); var result = weakDelegate.TryInvokeAction(); context = null; var result2 = weakDelegate.TryInvokeAction(); Task.Delay(100).ContinueWith(async _ => { while (true) { var result3 = weakDelegate.TryInvokeAction(); if (!result3) { Console.WriteLine("Reference was lost"); break; } await Task.Delay(100).ConfigureAwait(false); GC.Collect(); } }); }
/// <summary> /// The add context. /// </summary> /// <param name="name"> /// The name. /// </param> /// <param name="context"> /// The context. /// </param> /// <param name="owner"> /// The owner. /// </param> private static void AddContext(string name, ObjectContext context, object owner) { Contract.Requires<ArgumentNullException>(owner != null, "owner"); _aspectContexts[name] = new WeakContext(owner) {Context = context}; }