La version asynchrone sera toujours plus lente que la version synchrone lorsqu'il n'y a pas de concurrence. Il fait le même travail que la version non asynchrone, mais avec une petite surcharge supplémentaire pour gérer l'asynchronisme.
L'asynchronisme est avantageux, en termes de performances, en permettant une meilleure disponibilité. Chaque requête individuelle sera plus lente, mais si vous faites 1000 requêtes en même temps, l'implémentation asynchrone pourra toutes les traiter plus rapidement (au moins dans certaines circonstances).
Cela se produit parce que la solution asynchrone permet au thread qui a été alloué pour gérer la requête de revenir au pool et de gérer d'autres requêtes, alors que la solution synchrone force le thread à rester là et à ne rien faire en attendant la fin de l'opération asynchrone. Il y a une surcharge à structurer le programme d'une manière qui permet au thread d'être libéré pour faire d'autres travaux, mais l'avantage est la capacité de ce thread à faire d'autres travaux. Dans votre programme, il n'y a pas d'autre travail à faire pour le thread, donc cela finit par être une perte nette.