Olá, Felipe, como vai?
O seu código atende bem à proposta da atividade e demonstra um bom entendimento do uso de funções assíncronas com asyncio, incluindo a definição de tarefas independentes e a coordenação delas com asyncio.gather. A simulação do tempo de envio com asyncio.sleep também está coerente com o cenário apresentado.
Obrigado por compartilhar sua solução. O fórum fica à disposição para novas dúvidas ou contribuições.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!