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); } }
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); } }