Lamda Creating Zombies

CSharp · Console

/Program.cs

using System;
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)
		{
			_disposed = true;
			Console.WriteLine("I was disposed!");
		}
	}
	
	public MyDisposableObject(EventGeneratorObject ego)
	{
		ego.MyEvent += (sender, e) => Console.WriteLine("I'm still alive.");
	}
}

public class EventGeneratorObject
{
	public EventGeneratorObject()
	{
		Task.Run(async () =>
				 {
					 for (int i = 0; i < 5; i++)
					 {
						 await Task.Delay(500);
						 OnMyEvent();
					 }
				 });
	}
	public event EventHandler<EventArgs> MyEvent;
	private void OnMyEvent() { if (MyEvent != null) MyEvent(this, EventArgs.Empty); }
}

public class Program
{
	public static void Main(string[] args)
	{
		EventGeneratorObject ego = new EventGeneratorObject();
		
		using (MyDisposableObject mdo = new MyDisposableObject(ego))
		{
			Task.Delay(1000).Wait();
		}
		
		//mdo is now a zombie object...
		
		Console.WriteLine("Press any key to quit");
		Console.ReadKey(true);
	}
}
;