Maison > développement back-end > C++ > Comment appeler correctement du code asynchrone dans les applications console C# ?

Comment appeler correctement du code asynchrone dans les applications console C# ?

Mary-Kate Olsen
Libérer: 2025-01-05 15:49:45
original
211 Les gens l'ont consulté

How Do I Properly Invoke Asynchronous Code in C# Console Applications?

Invocation asynchrone dans les applications console : démystifier le mythe « Up » et « Down »

En C#, lors de l'appel de méthodes asynchrones, il est On affirme communément que la synchronisation doit être maintenue "en haut" et "en bas" de la pile d'appels. Cependant, ce dogme ne s'applique pas aux applications console.

Considérez cet extrait de code :

public static async Task<int> SumTwoOperationsAsync()
{
    // Simulate time-consuming operations
    var firstTask = GetOperationOneAsync();
    var secondTask = GetOperationTwoAsync();

    // Sum the results of the operations
    return await firstTask + await secondTask;
}

private static async Task<int> GetOperationOneAsync()
{
    await Task.Delay(500); // Simulating operation delay
    return 10;
}

private static async Task<int> GetOperationTwoAsync()
{
    await Task.Delay(100); // Simulating operation delay
    return 5;
}
Copier après la connexion

Selon la règle "haut et bas", il semble logique de marquer la fonction Main , où SumTwoOperationsAsync est invoqué, comme asynchrone. Cependant, cette hypothèse est incorrecte. Les applications console ne prennent pas en charge les points d'entrée asynchrones. Toute tentative de le faire entraînera une erreur de compilation indiquant : "un point d'entrée ne peut pas être marqué avec le modificateur 'async'."

Alors, comment invoquer du code asynchrone dans les applications console ? Il existe deux approches principales :

  1. Utilisation de Wait ou GetAwaiter().GetResult() : Cette méthode attend de manière synchrone la tâche renvoyée par SumTwoOperationsAsync.
static void Main()
{
  MainAsync().Wait();
  // Alternatively, to avoid wrapping exceptions in AggregateException:
  // MainAsync().GetAwaiter().GetResult();
}

static async Task MainAsync()
{
  // Async code goes here
}
Copier après la connexion
  1. Utilisation d'un contexte personnalisé : Vous pouvez créer votre propre contexte pour appeler des méthodes asynchrones. Cette approche offre davantage de capacités de contrôle et de gestion des erreurs.
static void Main()
{
  AsyncContext.Run(() => MainAsync());
}

static async Task MainAsync()
{
  // Async code goes here
}
Copier après la connexion

Pour des informations plus complètes sur les applications de console asynchrone, visitez l'article de blog fourni. N'oubliez pas que la règle « haut et bas » peut ne pas s'appliquer de manière transparente dans tous les scénarios.

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