using System.Threading.Tasks;
public class MyDisposableObject : IDisposable
private bool _disposed = false;
public void Dispose() { Dispose(true); }
protected virtual void Dispose(bool disposing)
if (disposing && !_disposed)
Console.WriteLine("I was disposed!");
public MyDisposableObject(EventGeneratorObject ego)
ego.MyEvent += (sender, e) => Console.WriteLine("I'm still alive.");
public class EventGeneratorObject
public EventGeneratorObject()
for (int i = 0; i < 5; i++)
public event EventHandler<EventArgs> MyEvent;
private void OnMyEvent() { if (MyEvent != null) MyEvent(this, EventArgs.Empty); }
public static void Main(string[] args)
EventGeneratorObject ego = new EventGeneratorObject();
using (MyDisposableObject mdo = new MyDisposableObject(ego))
Console.WriteLine("Press any key to quit");