public void Dispose() { if (Delegates != null) { foreach (var i in Delegates) { XTask.CurrentExecutingTask.RemoveEventHandler(i); } Delegates = null; GC.SuppressFinalize(this); // encourage a bit of cleanup Task.Factory.StartNew(XTask.Collect); } }