The `async.Run` execute all functions in the same time. Maybe a limit parameter can help with limited asynchronous tasks. Suggestion of signature: ```go runner := async.NewRunner(tasks...).WithLimit(5).OtherOption(foo, bar) err := runner.Do(ctx) ```