Maison > développement back-end > C++ > Attendre tâche.run (): quelle est la différence entre `attendre tâche.run (); return; `et` retour tâche.run () `?

Attendre tâche.run (): quelle est la différence entre `attendre tâche.run (); return; `et` retour tâche.run () `?

DDD
Libérer: 2025-01-30 03:46:10
original
243 Les gens l'ont consulté

Await Task.Run(): What's the Difference Between `await Task.Run(); return;` and `return Task.Run()`?

Fonctionnement asynchrone:

La différence subtile entre et await Task.Run(); return; return Task.Run()

À première vue, ces deux code semblent être très similaires:

<code class="language-csharp">async Task TestAsync() 
{
    await Task.Run(() => DoSomeWork());
    return;
}</code>
Copier après la connexion
<code class="language-csharp">Task TestAsync() 
{
    return Task.Run(() => DoSomeWork());
}</code>
Copier après la connexion
Bien que les deux utilisent

appellent des tâches asynchrones, il existe des différences subtiles et importantes dans leur comportement. Task.Run()

Communication anormale

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

, toute exception se propagera immédiatement et l'exécution de la méthode d'appel peut être interrompue. Cela peut conduire à des comportements inattendus et rendre un traitement anormal difficile.

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

est plus susceptible de se produire. Par exemple, si vous commencez les opérations asynchrones et utilisez

à 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal