Maison > développement back-end > C++ > Comment puis-je utiliser les paramètres de sortie avec des méthodes asynchrones dans .NET ?

Comment puis-je utiliser les paramètres de sortie avec des méthodes asynchrones dans .NET ?

Susan Sarandon
Libérer: 2025-01-03 05:42:39
original
705 Les gens l'ont consulté

How Can I Use Output Parameters with Asynchronous Methods in .NET?

Paramètres asynchrones et de sortie : un dilemme

Les développeurs rencontrent souvent le besoin d'écrire des méthodes asynchrones avec des paramètres de sortie, mais le framework .NET pose un défi à cet égard.

Le Problème

L'extrait de code suivant illustre le problème :

public async void Method1()
{
    int op;
    int result = await GetDataTaskAsync(out op);
}
Copier après la connexion

Ce code tente de créer une méthode asynchrone avec un paramètre de sortie, mais une telle fonctionnalité n'est pas disponible dans le .NET Cadre.

Le raisonnement

Selon Lucian Wischik, un Ingénieur Microsoft, cette limitation vient de la façon dont les méthodes asynchrones sont implémentées dans le CLR. Ils sont transformés par le compilateur en objets machine d'état, dépourvus d'un mécanisme sûr pour stocker l'adresse des paramètres de sortie ou de référence.

Solution de contournement

Une solution de contournement courante est que la méthode asynchrone renvoie un Tuple :

public async Task Method1()
{
    var tuple = await GetDataTaskAsync();
    int op = tuple.Item1;
    int result = tuple.Item2;
}

public async Task<Tuple<int, int>> GetDataTaskAsync()
{
    //...
    return new Tuple<int, int>(1, 2);
}
Copier après la connexion

Cette approche fournit un moyen de renvoyer plusieurs valeurs de la méthode asynchrone sans recourir à out paramètres.

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