Le fil qui retourne au pool de threads lors de l’utilisation de wait

Cependant, avec ASP.NET Web Api, si votre demande arrive sur un seul thread et que vous attendez une fonction, appelez ConfigureAwait(false) qui pourrait vous placer sur un autre thread lorsque vous renvoyez le résultat final de votre fonction ApiController. .

En fait, il suffit de faire une await . Une fois que votre méthode async en await , la méthode est bloquée mais le thread retourne au pool de threads. Lorsque la méthode est prête à continuer, tout thread est arraché du pool de threads et utilisé pour reprendre la méthode.

La source

Je viens de tester cela dans un programme de console:

 async Task foo() { int y = 0; while (y<5) y++; } async Task testAsync() { int i = 0; while (i < 100) { Console.WriteLine("Async 1 before: " + i++); } await foo(); while (i < 105) { i++; Console.WriteLine("Async 1 after: " + i); } } 

L’appel à await foo() n’entraîne pas le testAsync du thread sur testAsync était en cours d’exécution dans le pool de threads, il testAsync simplement ligne par ligne sur le même thread, du début à la fin. Qu’est-ce qui me manque ici?

Qu’est-ce qui me manque ici?

Il vous manque des avertissements du compilateur

Avertissement CS1998 Cette méthode asynchrone manque d’opérateurs “en attente” et s’exécutera de manière synchrone. Envisagez d’utiliser l’opérateur ‘wait’ pour attendre les appels d’API non bloquants ou ‘wait Task.Run (…)’ pour effectuer un travail lié à la CPU sur un thread en arrière-plan.

La méthode foo n’est pas vraiment asynchrone car elle ne await aucun appel en await .
Essayez d’append await Task.Delay à cet await Task.Delay .