//End run public async Task <Unit> Handle(EndRunCommand request, CancellationToken cancellationToken) { var run = await _runRepository.GetAsync(request.RunId).ConfigureAwait(false); var runnerUserId = await GetRunner(request).ConfigureAwait(false); //update run run.Ended = true; await _runRepository.UpdateAsync(run).ConfigureAwait(false); //store result var runResult = new RunResult { RunId = request.RunId, RunnerUserId = runnerUserId, EndedTime = _clock.UtcNow() }; await _runRepository.CreateResultAsync(runResult).ConfigureAwait(false); //publish event var evt = new RunEndedEvent { Orders = request.Orders, RoomId = request.RoomId, RunnerUserId = runResult.RunnerUserId, RunId = runResult.RunId, EndedTime = runResult.EndedTime, State = request.State }; await _eventPublisher.Publish(evt).ConfigureAwait(false); return(Unit.Value); }