Пример #1
0
        public override async Task BeforeEnter()
        {
            // Make sure only one update action is done at a time
            using (await _syncLockFactory.Create().ConfigureAwait(false)) {
                await _projectionDataService.UpdateProjection().ConfigureAwait(false);

                _projectedData = await _projectionDataService.GetProjection().ConfigureAwait(false);
            }
        }
        public override async Task AfterEnter()
        {
            // Update asynchronously so that other threads receive the previous projection and don't wait for the update
            await Task.Factory.StartNew(async() => {
                // Make sure only one update action is done at a time
                using (await _syncLockFactory.Create().ConfigureAwait(false)) {
                    await _projectionDataService.UpdateProjection().ConfigureAwait(false);
                    _projectedData = await _projectionDataService.GetProjection().ConfigureAwait(false);
                }

                await _projectionSystem.MarkProjectionAsUpToDate().ConfigureAwait(false);
            }, CancellationToken.None, TaskCreationOptions.LongRunning, _taskScheduler)
            .ConfigureAwait(false);
        }
Пример #3
0
 public async Task <IEnumerable <TItem> > GetProjection()
 {
     using (await _getProjectionLockFactory.Create().ConfigureAwait(false)) {
         if (State.Id == StateId.Uninitialised)
         {
             await TransitionToCreatingState().ConfigureAwait(false);
         }
         if (State.Id == StateId.Expired)
         {
             await TransitionToUpdatingState().ConfigureAwait(false);
         }
         return(await State.GetProjection().ConfigureAwait(false));
     }
 }