Maison > développement back-end > C++ > Qu'arrive-t-il au fil de discussion après un mot-clé « attendre » dans la programmation asynchrone C# ?

Qu'arrive-t-il au fil de discussion après un mot-clé « attendre » dans la programmation asynchrone C# ?

Susan Sarandon
Libérer: 2025-01-05 16:32:41
original
850 Les gens l'ont consulté

What Happens to the Thread After an `await` Keyword in C# Async Programming?

Comprendre le comportement des threads après le mot-clé wait

Dans la programmation asynchrone, le mot-clé wait joue un rôle crucial dans la gestion des threads et dans la garantie d'une exécution efficace. Cependant, il peut être déroutant de comprendre comment le code se déroule après avoir rencontré wait. Cet article vise à clarifier cela avec une exploration détaillée.

Considérez l'extrait de code suivant comme exemple :

private async Task MyAsyncMethod()
{
    // Code before await
    await MyOtherAsyncMethod();
    // Code after await
}

private void MyMethod()
{
    Task task = MyAsyncMethod();
    task.Wait();
}
Copier après la connexion

Lorsque le mot-clé wait est rencontré dans MyAsyncMethod, le contrôle est rendu à MyMethod. En effet, MyAsyncMethod est marqué comme asynchrone. Cependant, puisque task.Wait() est ensuite appelé, le thread exécutant MyMethod est bloqué, empêchant apparemment l'exécution du code après wait.

Un nouveau thread exécute-t-il le code après wait ?

La réponse est : peut-être. Le comportement dépend de l'implémentation du contexte de synchronisation qui est "actuel" au moment où l'expression d'attente est évaluée.

Dans l'exemple fourni, si le code s'exécute sur un thread d'interface utilisateur, la suite (le code après wait) sera exécuté sur le même thread d'interface utilisateur. D'un autre côté, si le code s'exécute sur un thread du pool de threads, la suite peut être exécutée sur n'importe quel thread du pool de threads disponible.

Éviter le blocage des threads

Si le but est d'exécuter le code après wait immédiatement, il est crucial d'éviter de bloquer le thread avec task.Wait() ou task.Result. Au lieu de cela, envisagez d'autres options telles que l'enregistrement d'un rappel ou l'utilisation de la tâche d'attente elle-même.

Contrôle de l'affinité des threads

Pour les scénarios dans lesquels une affinité de thread spécifique est requise pour la suite, le La méthode ConfigureAwait peut être utilisée. En passant false à ConfigureAwait, la suite peut recevoir explicitement l'instruction de s'exécuter sur un contexte de thread différent.

Ressources supplémentaires

Pour approfondir votre compréhension du comportement des threads avec wait, reportez-vous aux ressources suivantes :

  • Documentation MSDN : https://docs.microsoft.com/en-us/dotnet/csharp/async/
  • C# in Depth, 3e édition : https://www.manning.com/books/csharp-in-owned -troisième édition
  • Série de screencasts Tekpub : https://www.tekpub.com/category/257-asynchronous-programming-in-c-sharp

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal