public void Process(WaitRequestReceived evt, EffectTracker effects) { if (WaitRequestReceived.SatisfiesWaitCondition(this.OrchestrationState)) { if (!effects.IsReplaying) { this.Partition.Send(evt.CreateResponse(this.OrchestrationState)); } } else { if (this.Waiters == null) { this.Waiters = new List <WaitRequestReceived>(); } else { // cull the list of waiters to remove requests that have already timed out this.Waiters = this.Waiters .Where(request => request.TimeoutUtc > DateTime.UtcNow) .ToList(); } this.Waiters.Add(evt); } }
public void Process(BatchProcessed evt, EffectTracker effects) { // update the state of an orchestration this.OrchestrationState = evt.State; // if the orchestration is complete, notify clients that are waiting for it if (this.Waiters != null && WaitRequestReceived.SatisfiesWaitCondition(this.OrchestrationState)) { if (!effects.IsReplaying) { foreach (var request in this.Waiters) { this.Partition.Send(request.CreateResponse(this.OrchestrationState)); } } this.Waiters = null; } }