Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Asynkrona metoder kan inte ha lokala efterreferenser
För att hantera asynkront tillstånd async
använder metoderna en tillståndsdator och samlar in variabeltillstånd i stängningar som implementerats i kompilatorgenererade klasser och egenskaper. En lokal variabelreferens (på stacken) kan inte samlas in i instansen av en klass i heapen, så kompilatorn utfärdar ett fel.
Följande exempel genererar CS8177 före 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);
}
}
}
ref
Ta bort modifieraren. Eller så kan du uppgradera till C# 13, som levereras med .NET 9.
class C
{
public async static Task Test()
{
await Task.CompletedTask;
foreach (int x in new E())
{
System.Console.Write(x);
}
}
}
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: