Предположим, что тебе надо загрузить 1000 страниц в 10 потоков.
Семафор позволяет установить ограничение в 10 потоков.
Другими словами. Это ограничение числа одновременно исполняемых задач.
В коде, вероятно, ошибка:
await fetch(url, session)
return await fetch(url, session)