The ForEach Workflow runs the tasks in Serial, which means it's not very efficient if there's a large number of iterations.
For example, I had a list of about 1500 users I needed to update a value for, and the even though the API call took less than a sec to run, due to the processing time, it was a minimum of 5 secs per iteration.
Ended up taking many more minutes than anticipated. If I had to redo it again, I would use an UC_ACTIVATE_OBJECT to run it as an external task.