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
Susan Sarandonoriginal
2025-01-03 05:42:39763parcourir

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);
}

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);
}

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