Maison > développement back-end > C++ > Qu'arrive-t-il à l'exécution des threads après un mot-clé « attendre » en C# ?

Qu'arrive-t-il à l'exécution des threads après un mot-clé « attendre » en C# ?

DDD
Libérer: 2024-12-29 21:54:10
original
907 Les gens l'ont consulté

What Happens to Thread Execution After an `await` Keyword in C#?

Comprendre l'exécution du thread après le mot clé « attendre »

Considérez l'exemple de code suivant :

private void MyMethod()
{
    Task task = MyAsyncMethod();
    task.Wait();
}

private async Task MyAsyncMethod()
{
    //Code before await
    await MyOtherAsyncMethod();
    //Code after await
}
Copier après la connexion

Dans cet exemple, lorsque le mot clé wait est rencontré dans MyAsyncMethod(), le contrôle revient à MyMethod(). Cependant, le thread n'est pas verrouillé à cause de task.Wait(). Au lieu de cela, la continuation (le code suivant wait) s'exécute sur un thread différent.

L'opérateur wait utilise un contexte de synchronisation, qui détermine comment la continuation doit être exécutée. Par défaut, si l'appelant s'exécute sur un thread d'interface utilisateur, la suite est également exécutée sur le thread d'interface utilisateur. Cela permet une intégration transparente avec les opérations de l'interface utilisateur.

Cependant, si l'appelant s'exécute sur un thread de pool de threads, la suite peut s'exécuter sur un thread de pool de threads différent. En effet, les threads du pool de threads ne sont pas destinés à être dédiés à des tâches spécifiques et peuvent être utilisés pour plusieurs opérations simultanément.

Il est important de noter que le comportement de l'opérateur wait peut être modifié à l'aide de la méthode ConfigureAwait. Cette méthode vous permet de spécifier si la suite doit s'exécuter sur le même thread ou sur un thread différent.

Par exemple, si vous ne souhaitez pas que la suite s'exécute sur le même thread et à la place sur un thread de pool de threads :

await task.ConfigureAwait(false);
Copier après la connexion

En comprenant le fonctionnement des contextes de synchronisation, vous pouvez gérer efficacement l'exécution des threads dans du code asynchrone et éviter d'éventuels problèmes de verrouillage.

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