Why isn\'t there an AutoResetEventSlim class in BCL?
Can it be simulated using ManualResetEventSlim?
I was bugged by this fact as well.
However, it appears that you can simulate an AutoResetEvent(Slim) using a simple SemaphoreSlim with a special configuration:
SemaphoreSlim Lock = new SemaphoreSlim( 1, 1 );
In the constructor, the first parameter defines the initial state of the semaphore: 1 means that one thread may enter, 0 that the semaphore has to be released first. So new AutoResetEvent( true ) translates to new SemaphoreSlim( 1, 1 ) and new AutoResetEvent( false ) translates to new SemaphoreSlim( 0, 1 ) respectively.
The second parameter defines the maximum number of threads that may enter the semaphore concurrently. Setting it to 1 lets it behave like an AutoResetEvent.
One other nice thing about the SemaphoreSlim is that with the new async/await pattern in 4.5 the class has received a .WaitAsync() method which can be awaited. So there is no need to manually create an awaitable wait primitive in this case any more.
Hope this helps.