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());
}
}
}