Zaimplementuj asynchroniczną kolejkę zadań z limitem równoczesności: zadania są najpierw dodawane do kolejki, następnie uruchamiane metodą loop; nie więcej niż określona liczba zadań powinna działać jednocześnie. Gdy wszystkie zadania w kolejce i te wykonywane zostaną zakończone, powiadom o zakończeniu kolejki.