Tasks.cs 2.4 KB

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