簡體   English   中英

按照批量添加到列表的順序執行任務集合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM