private async Task <long> HandleMessageJournalEntries(long count, MessageJournalReadResult result, IBus bus, CancellationToken cancellationToken) { var entries = result.Entries; using (var entryEnumerator = entries.GetEnumerator()) { if (!entryEnumerator.MoveNext()) { return(count); } // Handle messages [0, ..., n-2] var current = entryEnumerator.Current; count++; while (entryEnumerator.MoveNext()) { var next = entryEnumerator.Current; if (next != null) { await HandleMessageJournalEntry(bus, cancellationToken, current, next.Position, count); } current = next; count++; } // Handle message [n-1] await HandleMessageJournalEntry(bus, cancellationToken, current, result.Next, count); count++; } return(count); }
private async Task <MessageJournalReadResult> ReadNext(CancellationToken cancellationToken, MessageJournalPosition current) { MessageJournalReadResult readResult = null; try { readResult = await _messageJournal.Read(current, _batchSize, _filter, cancellationToken); } catch (OperationCanceledException) { throw; } catch (Exception ex) { _diagnosticService.Emit(new DiagnosticEventBuilder(this, DiagnosticEventType.UnhandledException) { Detail = "Error reading message journal", Exception = ex }.Build()); if (_rethrowExceptions) { throw; } } return(readResult); }