CountdownEvent
A simplified implementation of .NET 4 CountdownEvent
for use in earlier versions of .NET. Only the methods
used by NUnit are implemented.
using System.Threading;
namespace NUnit.Framework.Internal.Execution
{
public class CountdownEvent
{
private int _initialCount;
private int _remainingCount;
private object _lock = new object();
private ManualResetEvent _event = new ManualResetEvent(false);
public int InitialCount => _initialCount;
public int CurrentCount => _remainingCount;
public CountdownEvent(int initialCount)
{
_initialCount = (_remainingCount = initialCount);
}
public void Signal()
{
lock (_lock) {
if (--_remainingCount == 0)
_event.Set();
}
}
public void Wait()
{
_event.WaitOne();
}
}
}