Wait () fará com que o código potencialmente assíncrono seja executado de maneira sincronizada. aguardar não.
Por exemplo, você tem um aplicativo Web asp.net. O usuário A chama o terminal / getUser / 1. O pool de aplicativos asp.net selecionará um thread do pool de threads (Thread1) e, esse thread fará uma chamada http. Se você esperar (), esse encadeamento será bloqueado até que a chamada http seja resolvida. Enquanto estiver aguardando, se o UsuárioB chamar / getUser / 2, o pool de aplicativos precisará atender outro encadeamento (Thread2) para fazer a chamada http novamente. Você acabou de criar (bem, buscado no pool de aplicativos, na verdade) outro encadeamento sem motivo, porque você não pode usar o Thread1, pois foi bloqueado por Wait ().
Se você usar aguardar no Thread1, o SyncContext gerenciará a sincronização entre o Thread1 e a chamada http. Simplesmente, ele será notificado assim que a chamada http for concluída. Enquanto isso, se o UsuárioB chamar / getUser / 2, você usará o Thread1 novamente para fazer uma chamada http, porque foi liberada uma vez que a espera foi atingida. Em seguida, outro pedido pode usá-lo, ainda mais. Depois que a chamada http é concluída (usuário1 ou usuário2), o Thread1 pode obter o resultado e retornar ao chamador (cliente). O Thread1 foi usado para várias tarefas.
Task
que leva 10 ms realmente executasse 10 horasTask
no seu encadeamento, bloqueando você por 10 horas inteiras?