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!