using SKMC.Api.Common.Logger; using SKMC.Api.Process.Control; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SKMC.Api.Common.Tasks { /// /// 任务运行相关扩展方法 /// public class Tasks { private static readonly ILogger log = LogFactory.Get(); /// /// 多任务运行, 异常时弹窗告警 /// /// true表示执行任务后等待任务完成, false表示不等待(可以由返回的tasks自行处理) /// /// public static List Run(bool taskWait = true, params Action[] actions) { var tasks = new List(); foreach (var item in actions) { var task = Task.Run(() => { try { item.Invoke(); } catch (Exception e) { ProcessExceptions.WrapThrows(e); } }); tasks.Add(task); } if (taskWait) Task.WaitAll(tasks.ToArray()); return tasks; } /// /// 多任务运行, 异常时不弹窗只打日志 /// /// true表示执行任务后等待任务完成, false表示不等待(可以由返回的tasks自行处理) /// /// public static List RunNoAlarm(bool taskWait = true, params Action[] actions) { var tasks = new List(); foreach (var item in actions) { var task = Task.Run(() => { try { item.Invoke(); } catch (Exception e) { log.Error($"Tasks Run Error:{e.Message}", e); } }); tasks.Add(task); } if (taskWait) Task.WaitAll(tasks.ToArray()); return tasks; } public static void WaitAll(List tasks) { Task.WaitAll(tasks.ToArray()); } } }