Wait(), fera en sorte d'exécuter du code potentiellement asynchrone de manière synchrone. await ne le fera pas.
Par exemple, vous avez une application web asp.net. UserA appelle le point de terminaison /getUser/1. Le pool d'applications asp.net choisira un thread du pool de threads (Thread1) et, ce thread fera un appel http. Si vous faites Wait(), ce thread sera bloqué jusqu'à ce que l'appel http soit résolu. Pendant qu'il attend, si l'utilisateur B appelle /getUser/2, alors le pool d'applications devra servir un autre thread (Thread2) pour effectuer un nouvel appel http. Vous venez de créer (ou plutôt d'aller chercher dans le pool d'applications) un autre thread sans raison, parce que vous ne pouvez pas utiliser Thread1 qui a été bloqué par Wait().
Si vous utilisez await sur Thread1, alors, SyncContext gérera la synchronisation entre Thread1 et l'appel http. Simplement, il notifiera une fois l'appel http terminé. Pendant ce temps, si UserB appelle /getUser/2, alors, vous utiliserez à nouveau Thread1 pour faire l'appel http, parce qu'il a été libéré une fois que await a été atteint. Ensuite, une autre requête peut l'utiliser, encore plus. Une fois l'appel http effectué (user1 ou user2), Thread1 peut obtenir le résultat et retourner à l'appelant (client). Thread1 a été utilisé pour plusieurs tâches.