/// <summary> /// Appends event to the event stream /// </summary> /// <param name="streamId">stream ID</param> /// <param name="version">version</param> /// <param name="events">events to append</param> /// <returns>async void task</returns> /// <exception cref="DuplicateTransitionException">When concurrency exception</exception> public async Task AppendEventsAsync(string streamId, int version, IEnumerable <IEvent> events) { var items = events.Select(x => _serializer.Serialize(x)); try { await Connection.AppendToStreamAsync(streamId, version, items, _credentials); } catch (WrongExpectedVersionException e) { throw new DuplicateTransitionException(streamId, version, e); } catch (AggregateException e) { if (e.InnerExceptions.Any(x => x is WrongExpectedVersionException)) { throw new DuplicateTransitionException(streamId, version, e); } } }