private static IEnumerable <IConnection> GetInboundConnectionPathInternal(this ICompositeActivityBlueprint workflowBlueprintBlueprintInstance, string activityId, HashSet <string> inspectedActivityIds) { foreach (var connection in workflowBlueprintBlueprintInstance.GetInboundConnections(activityId)) { // Circuit breaker: Detect workflows that implement repeating flows to prevent an infinite loop here. if (inspectedActivityIds.Contains(connection.Source.Activity.Id)) { yield break; } yield return(connection); foreach (var childConnection in workflowBlueprintBlueprintInstance.GetInboundConnectionPathInternal(connection.Source.Activity.Id, inspectedActivityIds).Distinct()) { inspectedActivityIds.Add(childConnection.Source.Activity.Id); yield return(childConnection); } } }
public static IEnumerable <IConnection> GetInboundConnectionPath(this ICompositeActivityBlueprint workflowBlueprint, string activityId) { var inspectedActivityIds = new HashSet <string>(); return(workflowBlueprint.GetInboundConnectionPathInternal(activityId, inspectedActivityIds)); }