Usage

local tasks = {}
local simulateTasks = 50
local limitTasks = 5

for i = 1, simulateTasks do
    table.insert(tasks, function(cb)
        print(('Do task %s'):format(i))
        cb()
    end)
end

Async.parallelLimit(tasks, limitTasks, function(results)
    print(('Tasks completed %s task of %s'):format(limitTasks, simulateTasks))
end)