<PackageReference Include="NUnit" Version="3.9.0" />

CountdownEvent

public class 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; 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 Signal(int signalCount) { lock (_lock) { _remainingCount = Math.Min(0, _remainingCount - signalCount); if (_remainingCount <= 0) _event.Set(); } } public void Wait() { _event.WaitOne(); } } }