public void Dispose() { if (_disposed) { return; } Stop(); _syncLock.EnterWriteLock(); try { _stopEvent.DisposeSafely(); _lightTeamLogicExecutor.DisposeSafely(); _darkTeamLogicExecutor.DisposeSafely(); _makeMoveEvent.DisposeSafely(); _disposed = true; } finally { _syncLock.ExitWriteLock(); } _syncLock.DisposeSafely(); }