#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed private async Task WriteBatchAsync(AtomicWrite aw) { var transaction = Database.CreateTransaction(); var payloads = aw.Payload.AsInstanceOf <IImmutableList <IPersistentRepresentation> >(); foreach (var payload in payloads) { var(bytes, tags) = Extract(payload); // save the payload transaction.SortedSetAddAsync(_journalHelper.GetJournalKey(payload.PersistenceId), bytes, payload.SequenceNr); // notify about a new event being appended for this persistence id transaction.PublishAsync(_journalHelper.GetJournalChannel(payload.PersistenceId), payload.SequenceNr); // save tags foreach (var tag in tags) { transaction.ListRightPushAsync(_journalHelper.GetTagKey(tag), $"{payload.SequenceNr}:{payload.PersistenceId}"); transaction.PublishAsync(_journalHelper.GetTagsChannel(), tag); } } // set highest sequence number key transaction.StringSetAsync(_journalHelper.GetHighestSequenceNrKey(aw.PersistenceId), aw.HighestSequenceNr); // add persistenceId transaction.SetAddAsync(_journalHelper.GetIdentifiersKey(), aw.PersistenceId).ContinueWith(task => { if (task.Result) { // notify about a new persistenceId Database.Publish(_journalHelper.GetIdentifiersChannel(), aw.PersistenceId); } }); if (!await transaction.ExecuteAsync()) { throw new Exception($"{nameof(WriteMessagesAsync)}: failed to write {typeof(IPersistentRepresentation).Name} to redis"); } }