public async Task Execute(
            IServiceProvider serviceProvider,
            IExecutionContext context,
            ISagaEvent @event,
            IStepData stepData)
        {
            if (typeof(TExecuteEvent) == typeof(EmptyEvent))
            {
                return;
            }

            ISagaCoordinator sagaCoordinator = serviceProvider.
                                               GetRequiredService <ISagaCoordinator>();

            IExecutionContext <TSagaData> contextForAction =
                (IExecutionContext <TSagaData>)context;

            TExecuteEvent executionEvent = new TExecuteEvent();

            if (action != null)
            {
                await action(contextForAction, executionEvent);
            }

            await sagaCoordinator.
            Publish(executionEvent, contextForAction.ExecutionValues);
        }