The core of task scheduling - finds tasks, builds schedule, executes tasks by schedule.
		protected virtual IEnumerable<String> BuildLogEntryFields(SchedulerEngineBase engine, EngineLogEntryType type, String additionalInfo)
		{
			yield return DateTime.Now.ToString("s");
			yield return engine.Name;
			yield return type.ToString();
			yield return WrapAsCsvValue(additionalInfo);
		}
		public void LogEngineMessage(SchedulerEngineBase engine, EngineLogEntryType type, String additionalInfo)
		{
			if (!this.ShouldLog(type)) { return; }
			var values = BuildLogEntryFields(engine, type, additionalInfo);
			var entry = String.Join(", ", values);

			WriteSchedulerMessage(type, PolishMessage(entry));
		}
		protected virtual IEnumerable<String> BuildLogEntryFields(SchedulerEngineBase engine, TaskLogEntryType type, ISchedulerTask task, DateTime taskStartedOn, String additionalInfo)
		{
			yield return DateTime.Now.ToString("s");
			yield return engine.Name;
			yield return type.ToString();
			yield return task.GetType().Name;
			yield return (DateTime.Now - taskStartedOn).ToString();
			yield return WrapAsCsvValue(additionalInfo);
		}
        protected virtual IEnumerable <String> BuildLogEntryFields(SchedulerEngineBase engine, EngineLogEntryType type, String additionalInfo)
        {
            yield return(DateTime.Now.ToString("s"));

            yield return(engine.Name);

            yield return(type.ToString());

            yield return(WrapAsCsvValue(additionalInfo));
        }
        public void LogEngineMessage(SchedulerEngineBase engine, EngineLogEntryType type, String additionalInfo)
        {
            if (!this.ShouldLog(type))
            {
                return;
            }
            var values = BuildLogEntryFields(engine, type, additionalInfo);
            var entry  = String.Join(", ", values);

            WriteSchedulerMessage(type, PolishMessage(entry));
        }
        public void LogTaskMessage(SchedulerEngineBase engine, TaskLogEntryType type, ISchedulerTask task, DateTime taskStartedOn, String additionalInfo)
        {
            if (!this.ShouldLog(type))
            {
                return;
            }
            var values = BuildLogEntryFields(engine, type, task, taskStartedOn, additionalInfo);
            var entry  = String.Join(", ", values);

            WriteSchedulerMessage(type, PolishMessage(entry));
        }
        protected virtual IEnumerable <String> BuildLogEntryFields(SchedulerEngineBase engine, TaskLogEntryType type, ISchedulerTask task, DateTime taskStartedOn, String additionalInfo)
        {
            yield return(DateTime.Now.ToString("s"));

            yield return(engine.Name);

            yield return(type.ToString());

            yield return(task.GetType().Name);

            yield return((DateTime.Now - taskStartedOn).ToString());

            yield return(WrapAsCsvValue(additionalInfo));
        }
		public void LogTaskMessage(SchedulerEngineBase engine, TaskLogEntryType type, ISchedulerTask task, DateTime taskStartedOn, String additionalInfo)
		{
			if (!this.ShouldLog(type)) { return; }
			var values = BuildLogEntryFields(engine, type, task, taskStartedOn, additionalInfo);
			var entry = String.Join(", ", values);
			WriteSchedulerMessage(type, PolishMessage(entry));
		}