Fonctionnement asynchrone:
La différence subtile entre et await Task.Run(); return;
return Task.Run()
<code class="language-csharp">async Task TestAsync() { await Task.Run(() => DoSomeWork()); return; }</code>
<code class="language-csharp">Task TestAsync() { return Task.Run(() => DoSomeWork()); }</code>
appellent des tâches asynchrones, il existe des différences subtiles et importantes dans leur comportement. Task.Run()
La principale différence est un traitement anormal. Dans le premier exemple, l'utilisation de
et sera capturée et jetée lorsque la méthode asynchrone attend plus tard la méthode asynchrone. Cela permet à l'appelant de gérer les anomalies avec élégance. await
DoSomeWork()
au contraire, dans le deuxième exemple de
await
synchrone ci-dessus
Une autre différence est liée au contexte synchrone. Dans l'exemple , l'opération dans s'exécute dans le contexte synchrone du thread d'appel. Au lieu de cela, dans l'exemple , fonctionne dans le contexte de différents pools de threads.
Lock mort await
DoSomeWork()
return Task.Run()
Lors de l'exécution d'opérations asynchrones dans l'application GUI avec un contexte de synchronisation non-défaut, la méthode
à partir du thread d'interface utilisateur, une impasse peut se produire. Résumé
await
Les résultats de ces deux fragments de code sont différents, principalement parce qu'ils sont différents de l'utilisation d'anomalies et de l'utilisation de await
. Pour les opérations asynchrones, l'utilisation de peut mieux contrôler la dissémination anormale et s'assurer qu'elle est correctement mise en œuvre dans le contexte de synchronisation correcte.
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!