private static IEnumerable <string> GetInboundActivityPathInternal(this WorkflowExecutionContext workflowExecutionContext, string activityId, string startingPointActivityId) { foreach (var connection in workflowExecutionContext.GetInboundConnections(activityId)) { // Circuit breaker: Detect workflows that implement repeating flows to prevent an infinite loop here. if (connection.Source.Activity.Id == startingPointActivityId) { yield break; } yield return(connection.Source.Activity.Id !); foreach (var parentActivityId in workflowExecutionContext .GetInboundActivityPathInternal(connection.Source.Activity.Id !, startingPointActivityId) .Distinct()) { yield return(parentActivityId); } } }