using System; using System.Collections.Generic; namespace Neo.Afx.Services { public class ServiceTask { private readonly object _theLock = new object(); private readonly IExecutable _executable; #region Initialization public ServiceTask(ServiceSchedule serviceSchedule, int serviceID, string serviceName, IExecutable executable) { Schedule = serviceSchedule; ServiceID = serviceID; ServiceName = serviceName; _executable = executable; } #endregion #region ServiceID public int ServiceID { get; private set; } #endregion #region ServiceName public string ServiceName { get; private set; } #endregion #region Schedule public ServiceSchedule Schedule { get; private set; } #endregion #region TraceInfo public string TraceInfo { get; private set; } #endregion #region Exceptions public IEnumerable Exceptions { get; internal set; } #endregion #region IsBusy public bool IsBusy { get; private set; } #endregion #region Run public void Run() { TraceInfo = null; Exceptions = null; lock(_theLock) { try { IsBusy = true; _executable.Run(); TraceInfo = _executable.TraceInfo; } finally { IsBusy = false; } } } #endregion #region ToString public override string ToString() { return string.Format("{0} LRT={1:G}", ServiceName, Schedule.LastRunTime); } public string ToString(string messageType, string message) { return string.Format("ST-{0}-{1} {2} - {3}", ServiceID, messageType, Schedule.PollFrequency, message); } #endregion } }