Возможно, это слишком поздно ночью, но я не могу придумать хороший способ сделать это.
Я начал кучу асинхронных загрузок, и я хочу подождать, пока они все не закончатся, прежде чем программа завершится. Это заставляет меня думать, что я должен что-то увеличивать, когда начинается загрузка, и уменьшать ее, когда она заканчивается. Но затем как подождать, пока счетчик будет 0 снова?
Семафоры вроде работают наоборот, когда вы блокируете, когда нет доступных ресурсов, а не когда они все доступны (блоки, когда count равно 0, а не ненулевое значение).