/// <summary>
        /// Queries for instance and invokes an instance method
        /// </summary>
        /// <param name="query">Query parameters</param>
        /// <param name="methodInvocationInfo">Method invocation details</param>
        /// <param name="passThru"><c>true</c> if successful method invocations should emit downstream the object instance being operated on</param>
        public override void ProcessRecord(QueryBuilder query, MethodInvocationInfo methodInvocationInfo, bool passThru)
        {
            _parentJob.DisableFlowControlForPendingJobsQueue();

            ThrottlingJob   closureOverParentJob = _parentJob;
            SwitchParameter closureOverAsJob     = this.AsJob;

            foreach (TSession sessionForJob in this.GetSessionsToActAgainst(query))
            {
                StartableJob queryJob = this.DoCreateQueryJob(
                    sessionForJob,
                    query,
                    delegate(TSession sessionForMethodInvocationJob, TObjectInstance objectInstance)
                {
                    StartableJob methodInvocationJob = this.DoCreateInstanceMethodInvocationJob(
                        sessionForMethodInvocationJob,
                        objectInstance,
                        methodInvocationInfo,
                        passThru,
                        closureOverAsJob.IsPresent);

                    if (methodInvocationJob != null)
                    {
                        closureOverParentJob.AddChildJobAndPotentiallyBlock(methodInvocationJob, ThrottlingJob.ChildJobFlags.None);
                    }
                });

                if (queryJob != null)
                {
                    if (!this.AsJob.IsPresent)
                    {
                        _parentJob.AddChildJobAndPotentiallyBlock(this.Cmdlet, queryJob, ThrottlingJob.ChildJobFlags.CreatesChildJobs);
                    }
                    else
                    {
                        _parentJob.AddChildJobWithoutBlocking(queryJob, ThrottlingJob.ChildJobFlags.CreatesChildJobs);
                    }
                }
            }
        }