protected virtual void StartReadySubJobs() { foreach (ISubJob subJob in SubJobs.Where(sjb => sjb.Status == JobStatus.Ready)) { subJob.StartAsync(); } }
protected virtual void CheckSubJobReadiness() { foreach (ISubJob subJob in SubJobs.Where(sjb => sjb.Status == JobStatus.OnQueue)) { subJob.CheckStatus(); } }
protected virtual void CycleSubJobs() { try { if (SubJobs.All(sjb => sjb.Status == JobStatus.Completed || sjb.Status == JobStatus.Failed)) { Complete(); } else { CheckSubJobReadiness(); if (!SubJobs.Any(sjb => sjb.Status == JobStatus.Ready || sjb.Status == JobStatus.Running)) { throw new Exception("No ready subjobs, check for circular dependencies."); } StartReadySubJobs(); } } catch (Exception e) { RaiseSyncError(e); } }