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; }
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 :
static void Main() { MainAsync().Wait(); // Alternatively, to avoid wrapping exceptions in AggregateException: // MainAsync().GetAwaiter().GetResult(); } static async Task MainAsync() { // Async code goes here }
static void Main() { AsyncContext.Run(() => MainAsync()); } static async Task MainAsync() { // Async code goes here }
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!