.net批量任务帮助类
第一次写博客 哈哈
在工作中有时候需要开启多线程来跑大量的数据,但是这台机器上可能不止有这一个程序在运行,例如一个web应用做导出数据,总不能让这个导出占用所有的cpu资源去做导出吧(如果真的这样做的话会导致部署在这台机器上的程序都运行比较慢因为需要等待CPU的空闲)所以这个时候就需要控制我在跑这个数据的时候去控制住在同一时间执行的线程数
需要代码就自己扣 我就不上传附件了
废话就不多说了 贴代码:
/// <summary>
/// 批量任务帮助
/// </summary>
public class TaskWait
{
public TaskWait()
{
AllTask = new List<Task>();
OneTime = 10;
}
/// <summary>
/// 所有的Task
/// </summary>
private List<Task> AllTask { get; set; }
/// <summary>
/// 一次同事执行几个task
/// </summary>
public int OneTime { get; set; }
/// <summary>
/// 开始执行
/// </summary>
public void Run()
{
AllTask.Take(OneTime).ToList().ForEach(t =>
{
t.Start();
});
}
/// <summary>
/// 添加任务
/// </summary>
/// <param name="task"></param>
public void AddTask(Task task)
{
task.GetAwaiter().OnCompleted(() =>
{
var t = AllTask.FirstOrDefault(f => f.Status == TaskStatus.Created);
if (t != null)
{
t.Start();
}
});
AllTask.Add(task);
}
}
public void Wait(){
Task.WaitAll(AllTask.ToArray());
}
我这里设置的默认是同一时间可以执行10个任务下面贴一下调用代码
TaskWait taskWait = new TaskWait()
{
OneTime = 2
};//设置成同一时刻可以执行2个任务(因为我们公司服务器比较差 哈哈)
创建了一个新的对象 然后把需要执行的任务通过下面的方式添加到待执行列表中
taskWait.AddTask(()=>{
//Code XXXXX
})
然后使用taskWait.Run();//执行
最后调用等待所有任务完成taskWait.Wait();