public ThreadWall(ThreadWallState state) { switch (state) { case ThreadWallState.Blocked: _semaphore = new SemaphoreSlim(0, 1); break; case ThreadWallState.UnBlocked: _semaphore = new SemaphoreSlim(1, 1); break; default: throw new NotSupportedException("Unsupported ThreadWallState supplied."); } }