public async Task Evaluate() { var builder = CreateRoutingSlipBuilder(_routingSlip); Build(builder); var routingSlip = builder.Build(); await _publisher.PublishRoutingSlipActivityCompensated(_compensateContext.ActivityName, _compensateContext.ExecutionId, _compensateContext.Timestamp, _duration, _routingSlip.Variables, _compensateLog.Data).ConfigureAwait(false); if (HasMoreCompensations(routingSlip)) { var endpoint = await _compensateContext.GetSendEndpoint(routingSlip.GetNextCompensateAddress()).ConfigureAwait(false); await _compensateContext.Forward(endpoint, routingSlip).ConfigureAwait(false); } else { var faultedTimestamp = _compensateContext.Timestamp + _duration; var faultedDuration = faultedTimestamp - _routingSlip.CreateTimestamp; await _publisher.PublishRoutingSlipFaulted(faultedTimestamp, faultedDuration, _routingSlip.Variables, _routingSlip.ActivityExceptions.ToArray()).ConfigureAwait(false); } }