public async Task Delete(DispatchStreamJob job, CancellationToken token) { var table = await _table.GetOrCreate(); var entity = new TableEntity { PartitionKey = "StreamsToDispatchOnRecovery", RowKey = $"R^{job.StreamId.Value}^{job.SessionId.Value}", ETag = "*" }; var operation = TableOperation.Delete(entity); await table.ExecuteAsync(operation, token); }
public async Task Write(Session session, CancellationToken token) { var job = new DispatchStreamJob(session.StreamId, session.SessionId); await _addDispatchStreamRecoveryJobs.Add(job, token); try { await WriteStream(session, token); } catch { await _deleteDispatchStreamRecoveryJobs.Delete(job, token); throw; } await _dispatchStreams.Dispatch(job, token); await _deleteDispatchStreamRecoveryJobs.Delete(job, token); }
public async Task Dispatch(DispatchStreamJob job, CancellationToken token = new CancellationToken()) { if (job == null) { throw new ArgumentNullException(nameof(job)); } var events = await _dispatching.Pull(job.StreamId, token); while (events.Any()) { await _events.Dispatch(events, token); await _dispatched.Confirm(token); if (token.IsCancellationRequested) { return; } events = await _dispatching.Pull(job.StreamId, token); } }