Escribe una función para ejecutar un array de tareas asíncronas con un límite en el número de tareas que se ejecutan simultáneamente; los resultados deben devolverse en el orden del array de tareas original, independientemente del orden de finalización.