Task InnerInvoke(Context context, int currentIndex = 0) { if (currentIndex == executingElements.Count) { return Task.CompletedTask; } ElementInstance element = executingElements[currentIndex]; return element.Invoke(context, ctx => InnerInvoke(ctx, currentIndex + 1)); } }