Los métodos asincrónicos no pueden tener variables locales por referencia
Para administrar ese estado asincrónico, los métodos async usan una máquina de estados, que captura el estado de las variables en clausuras implementadas en clases y propiedades generadas por el compilador. Una referencia de variable local (en la pila) no se puede capturar dentro de la instancia de una clase del montón, por lo que el compilador genera un error.
Ejemplo
El siguiente ejemplo genera el error CS8177 en versiones anteriores a C# 13:
// CS8177.cs (20,26)
using System.Threading.Tasks;
class E
{
public class Enumerator
{
public ref int Current => throw new System.NotImplementedException();
public bool MoveNext() => throw new System.NotImplementedException();
}
public Enumerator GetEnumerator() => new Enumerator();
}
class C
{
public async static Task Test()
{
await Task.CompletedTask;
foreach (ref int x in new E())
{
System.Console.Write(x);
}
}
}
Para corregir este error
Quite el modificador ref . O bien, puede actualizar a C# 13, que se incluye con .NET 9.
class C
{
public async static Task Test()
{
await Task.CompletedTask;
foreach (int x in new E())
{
System.Console.Write(x);
}
}
}
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.