TaskExecuteProvider.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using Quadarax.Foundation.Core.Data;
  2. using Quadarax.Foundation.Core.Logging;
  3. using Quadarax.Foundation.Core.Value.Extensions;
  4. namespace Quadarax.Foundation.Core.Business.Processor.Task.ExecuteProvider
  5. {
  6. public abstract class TaskExecuteProvider : ITaskExecuteProvider
  7. {
  8. #region *** Properties ***
  9. protected ILog Log => _log;
  10. #endregion
  11. #region *** Private fields ***
  12. private ILog _log;
  13. #endregion
  14. #region *** Constructors ***
  15. protected TaskExecuteProvider()
  16. {
  17. _log = new ConsoleLogger().GetLogger(GetType());
  18. }
  19. #endregion
  20. public ITaskExecuteResult Execute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments)
  21. {
  22. Log.Log(LogSeverityEnum.Debug, $"[{taskIdentifier}] Start executing task '{GetType().Name}' ...");
  23. var start = DateTime.Now;
  24. var duration = TimeSpan.Zero;
  25. var result = new TaskExecuteResult(TimeSpan.Zero);
  26. try
  27. {
  28. OnValidateArguments(arguments);
  29. OnExecute(taskIdentifier, arguments, result);
  30. }
  31. catch (Exception e)
  32. {
  33. Log.Log(LogSeverityEnum.Error, $"[{taskIdentifier}] Error executing task '{GetType().Name}' : {e.Message}", e);
  34. result.AddError(new Error(e));
  35. result.SetSuccess(false);
  36. }
  37. finally
  38. {
  39. duration = DateTime.Now.Subtract(start);
  40. Log.Log(LogSeverityEnum.Debug,
  41. $"[{taskIdentifier}] Finished executing task @{DateTime.Now.Subtract(start).ToReadableString()}");
  42. }
  43. result.ExecutionTime = duration;
  44. return result;
  45. }
  46. protected abstract void OnExecute(ITaskIdentifier taskIdentifier, ITypedArgument[] arguments,
  47. ITaskExecuteResult result);
  48. protected abstract void OnValidateArguments(ITypedArgument[] arguments);
  49. #region *** Nested classes ***
  50. private class TaskExecuteResult : Result, ITaskExecuteResult
  51. {
  52. #region *** Properties ***
  53. public TimeSpan ExecutionTime { get; set; }
  54. #endregion
  55. #region *** Constructors ***
  56. public TaskExecuteResult()
  57. {
  58. }
  59. public TaskExecuteResult(TimeSpan executionTime)
  60. {
  61. ExecutionTime = executionTime;
  62. }
  63. #endregion
  64. }
  65. #endregion
  66. }
  67. }