I have read the documentation on this and I think I understand. An AutoResetEvent resets when the code passes through event.WaitOne(), but a ManualResetEvent do
event.WaitOne()
autoResetEvent.WaitOne()
is similar to
try { manualResetEvent.WaitOne(); } finally { manualResetEvent.Reset(); }
as an atomic operation