La programmation asynchrone implique souvent await
et Task.Run
, ce qui entraîne une confusion potentielle. Cet article clarifie leurs différences à travers un exemple précis.
Analysons ces extraits de code :
<code class="language-csharp">await Task.Run(() => LongProcess());</code>
<code class="language-csharp">await LongProcess();</code>
LongProcess
est une méthode asynchrone effectuant plusieurs appels de base de données à l'aide de await ExecuteReaderAsync()
.
Il est important de préciser que async
/await
ne crée pas intrinsèquement plusieurs fils de discussion. Un seul fil gère tout.
Async
/await
permet à un thread d'effectuer d'autres tâches en attendant des opérations asynchrones. Imaginez un chef effectuant plusieurs tâches entre couper des légumes et vérifier le four ; de la même manière, le thread bascule entre les tâches jusqu'à ce qu'il rencontre await
, reprenant ensuite l'exécution.
Task.Run
est précieux lors du lancement d'une opération asynchrone sans attendre immédiatement son achèvement. Ceci est avantageux pour maintenir la réactivité des threads pour les entrées utilisateur ou d'autres tâches pendant l'exécution de l'opération asynchrone.
Dans cet exemple, les deux approches donnent des résultats identiques. await Task.Run(...)
exécute l'opération asynchrone sur un thread distinct géré par Task.Run
. Cependant, le fil de discussion actuel attend toujours d'être terminé, ce qui le rend fonctionnellement équivalent à l'attente directe LongProcess
.
Maîtriser les nuances de async
/await
est crucial pour une programmation asynchrone efficace. Dans ce cas précis, await Task.Run(...)
et await
obtiennent le même résultat. Le choix optimal dépend de la nécessité ou non de maintenir la réactivité du thread actuel pendant l'opération asynchrone.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!