[英]Execute a collection of tasks int the order they where add to a list in batchs
我想知道是否有人可以幫助我,我試圖弄清楚如何批量執行並發任務,如果這是一個愚蠢的問題,我深表歉意。 但是,我只能讓它們同時執行。 我在下面創建了一個 class,它旨在能夠將任務添加到集合中,並且當調用 ExecuteTasks() 方法時,按照它們在列表中添加的順序批量運行任務。 一旦創建了任務,它們似乎就開始執行,有沒有辦法解決這個問題。
public class TaskBatches
{
private readonly List<Task> _tasks;
private int _batchSize;
public TaskBatches()
{
_tasks = new List<Task>();
_batchSize = 2;
}
public void Add(Task task)
{
if (task == null)
return;
_tasks.Add(task);
}
public void Add(List<Task> task)
{
if (!task.Any())
return;
_tasks.AddRange(task);
}
public void Add(params List<Task>[] toAdd)
{
if (!toAdd.Any())
return;
foreach (var element in toAdd.SelectMany(items => items))
Add(element);
}
public async Task ExecuteTasks()
{
foreach (var batch in _tasks.Where(x => !x.IsCompleted || !x.IsCanceled).Chunk(_batchSize))
await Task.WhenAll(batch);
_tasks.RemoveAll(x => x.IsCompleted);
}
public void SetBatchSize(int batchSize)
{
_batchSize = batchSize;
}
}
public async Task ExecuteTasks()
{
foreach (var task in _tasks)
{
await task;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.