public async Task Handle(IDomainEvent <Resource, ResourceId, ResourceCreatedEvent> domainEvent)
        {
            //simulates a long running process
            var resourceId   = domainEvent.AggregateIdentity;
            var startedEvent = new ResourceCreationStartedEvent(resourceId, DateTime.UtcNow);
            var started      = DateTimeOffset.UtcNow;

            Emit(startedEvent);

            var rng      = new Random();
            var progress = 0;

            while (progress < 100)
            {
                var delay = rng.Next(1, 3);

                await Task.Delay(delay * 1000);

                progress += rng.Next(5, 15);
                var elapsed       = DateTimeOffset.UtcNow - started;
                var progressEvent = new ResourceCreationProgressEvent(resourceId, progress, (int)elapsed.TotalSeconds, DateTime.UtcNow);
                Emit(progressEvent);
            }

            var elapsedTime = DateTimeOffset.UtcNow - started;
            var endedEvent  = new ResourceCreationEndedEvent(resourceId, 100, (int)elapsedTime.TotalSeconds, DateTime.UtcNow);

            Emit(endedEvent);
        }
 public void Apply(ResourceCreationStartedEvent aggregateEvent)
 {
     Progress = 0;
     Start();
 }
Ejemplo n.º 3
0
 public void Apply(ResourceCreationStartedEvent _)
 {
     Progress = 0;
 }