public override async Task <TResponseData> Send <TResponseData>(IRequest <TResponseData> request, CancellationToken cancelToken = default(CancellationToken)) { if (!ShouldLock(request)) { return(await base.Send(request, cancelToken).ConfigureAwait(false)); } var gameId = ((IHaveGameId)request).GameId; using (var i = await _gameLocker.ConfirmLock(gameId, true).ConfigureAwait(false)) { HandleCTS(request, i.Token); return(await base.Send(request, cancelToken).ConfigureAwait(false)); } }
public async Task <bool> SwitchGame(Guid id) { using (await _lock.LockAsync().ConfigureAwait(false)) { if (_stateHandler.SelectedGameId == id) { return(false); } using (await _locker.ConfirmLock(id).ConfigureAwait(false)) await UpdateGameState(id).ConfigureAwait(false); return(true); } }