Tasks.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using SKMC.Api.Common.Logger;
  2. using SKMC.Api.Process.Control;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace SKMC.Api.Common.Tasks
  9. {
  10. /// <summary>
  11. /// 任务运行相关扩展方法
  12. /// </summary>
  13. public class Tasks
  14. {
  15. private static readonly ILogger log = LogFactory.Get();
  16. /// <summary>
  17. /// 多任务运行, 异常时弹窗告警
  18. /// </summary>
  19. /// <param name="taskWait">true表示执行任务后等待任务完成, false表示不等待(可以由返回的tasks自行处理)</param>
  20. /// <param name="actions"></param>
  21. /// <returns></returns>
  22. public static List<Task> Run(bool taskWait = true, params Action[] actions)
  23. {
  24. var tasks = new List<Task>();
  25. foreach (var item in actions)
  26. {
  27. var task = Task.Run(() =>
  28. {
  29. try
  30. {
  31. item.Invoke();
  32. }
  33. catch (Exception e)
  34. {
  35. ProcessExceptions.WrapThrows(e);
  36. }
  37. });
  38. tasks.Add(task);
  39. }
  40. if (taskWait) Task.WaitAll(tasks.ToArray());
  41. return tasks;
  42. }
  43. /// <summary>
  44. /// 多任务运行, 异常时不弹窗只打日志
  45. /// </summary>
  46. /// <param name="taskWait">true表示执行任务后等待任务完成, false表示不等待(可以由返回的tasks自行处理)</param>
  47. /// <param name="actions"></param>
  48. /// <returns></returns>
  49. public static List<Task> RunNoAlarm(bool taskWait = true, params Action[] actions)
  50. {
  51. var tasks = new List<Task>();
  52. foreach (var item in actions)
  53. {
  54. var task = Task.Run(() =>
  55. {
  56. try
  57. {
  58. item.Invoke();
  59. }
  60. catch (Exception e)
  61. {
  62. log.Error($"Tasks Run Error:{e.Message}", e);
  63. }
  64. });
  65. tasks.Add(task);
  66. }
  67. if (taskWait) Task.WaitAll(tasks.ToArray());
  68. return tasks;
  69. }
  70. public static void WaitAll(List<Task> tasks)
  71. {
  72. Task.WaitAll(tasks.ToArray());
  73. }
  74. }
  75. }