Пример #1
0
        public async Task OnCommandAsync(IInvalidateCommand command, CommandContext context, CancellationToken cancellationToken)
        {
            var skip = !IsEnabled ||
                       !InvalidationInfoProvider.RequiresInvalidation(command.UntypedCommand) ||
                       Computed.IsInvalidating();

            if (skip)
            {
                await context.InvokeRemainingHandlersAsync(cancellationToken).ConfigureAwait(false);

                return;
            }

            using var _ = Computed.Invalidate();
            var finalHandler = context.ExecutionState.FindFinalHandler();

            if (finalHandler != null)
            {
                if (Log.IsEnabled(LogLevel.Debug))
                {
                    Log.LogDebug("Invalidating via dedicated command handler: {0}", command);
                }
                await context.InvokeRemainingHandlersAsync(cancellationToken).ConfigureAwait(false);
            }
            else
            {
                if (Log.IsEnabled(LogLevel.Debug))
                {
                    Log.LogDebug("Invalidating via shared command handler: {0}", command);
                }
                await context.Commander.RunAsync(command.UntypedCommand, cancellationToken).ConfigureAwait(false);
            }
        }
Пример #2
0
        public async Task OnCommandAsync(IInvalidateCommand command, CommandContext context, CancellationToken cancellationToken)
        {
            var skip = !IsEnabled ||
                       !InvalidationInfoProvider.RequiresInvalidation(command.UntypedCommand) ||
                       Computed.IsInvalidating();

            if (skip)
            {
                await context.InvokeRemainingHandlersAsync(cancellationToken).ConfigureAwait(false);

                return;
            }

            // Copying IOperation.Items to CommandContext.Items
            var operation      = command.Operation;
            var operationItems = operation?.Items.Items;

            if (operationItems != null)
            {
                foreach (var(key, value) in operationItems)
                {
                    if (value is IOperationItem)
                    {
                        context.Items[key] = value;
                    }
                }
            }

            var logEnabled = LogLevel != LogLevel.None && Log.IsEnabled(LogLevel);

            using var _ = Computed.Invalidate();

            var finalHandler = context.ExecutionState.FindFinalHandler();

            if (finalHandler != null)
            {
                if (logEnabled)
                {
                    Log.Log(LogLevel, "Invalidating via dedicated command handler: {0}", command);
                }
                await context.InvokeRemainingHandlersAsync(cancellationToken).ConfigureAwait(false);
            }
            else
            {
                if (logEnabled)
                {
                    Log.Log(LogLevel, "Invalidating via shared command handler: {0}", command);
                }
                await context.Commander.RunAsync(command.UntypedCommand, cancellationToken).ConfigureAwait(false);
            }
        }