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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }