Maison >développement back-end >C++ >Comment fonctionnent «Async» et «Await» dans la programmation asynchrone sans les fils d'arrière-plan engendrés?

Comment fonctionnent «Async» et «Await» dans la programmation asynchrone sans les fils d'arrière-plan engendrés?

Patricia Arquette
Patricia Arquetteoriginal
2025-02-02 18:31:09827parcourir

How Do `async` and `await` Work in Async Programming Without Spawning Background Threads?

dans la programmation asynchrone

et compréhension async await De nombreux développeurs sont confus quant au mécanisme de travail de

et

dans la programmation asynchrone. Pour comprendre le mystère de leur utilisation, nous explorerons leurs mécanismes et montrerons la différence entre eux et générerons des fils d'arrière-plan. async await clarifiant

et

utilisation async await Votre exemple met l'accent sur l'utilisation de et

dans l'incident "Button1_Click". Bien que cette méthode soit marquée car soit très importante, ce n'est pas la même chose que la génération de threads d'arrière-plan. Au lieu de cela, la programmation asynchrone utilise une machine d'état gérée par le compilateur en arrière-plan.

async Dans votre code, après avoir démarré "DosomethingAsync ()", le code continue d'effectuer des opérations qui ne sont pas liées à la tâche. La variable "Access" contient la tâche qui finira. Lorsque vous atteignez l'instruction "Await Access", le code est suspendu et relâché le thread actuel. await async Comprendre l'exécution d'arrière-plan

Contrairement à vos hypothèses, "DoSomethingasync ()" ne sera pas exécuté sur le thread d'arrière-plan. Il utilise le thread actuel et démarre l'opération dormante. Une fois terminé, la machine d'état reprend l'exécution et permet de continuer à continuer à exécuter "Button1_Click".

Un exemple asynchrone plus complet

Afin de fournir une compréhension plus claire, veuillez considérer les exemples d'exemples suivants:

dans cette scène:

"myMethodasync ()" démarre "longRuningOperationAsync ()".

<code class="language-csharp">public async Task MyMethodAsync()
{
    Task<int> longRunningTask = LongRunningOperationAsync();
    // 这里可以进行独立的工作...

    // 等待长时间运行的任务
    int result = await longRunningTask;
    // 使用结果...
}

public async Task<int> LongRunningOperationAsync()
{
    await Task.Delay(1000); // 1秒延迟
    return 1;
}</code>
Le travail indépendant exécutif permet au fil principal de continuer.

Lors de la rencontre "Await LongrunningTask", le thread principal libérera et exécutera la suspension.
  1. Si "LongrunningOperationAsync ()" n'est pas terminé, un thread dans le pool de threads restaurera "MyMethodasync ()" et continuera à s'exécuter une fois la tâche terminée.
  2. Si "LongrunningOperationAsync ()" est terminé, les résultats sont disponibles immédiatement.
  3. Cet exemple montre comment la programmation asynchrone favorise une écriture facile et un code efficace pour éviter de bloquer les opérations et assurer des processus d'exécution en douceur.

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!

Déclaration:
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