Chyba kompilátoru CS8177
Asynchronní metody nemohou mít místní hodnoty podle odkazu
Ke správě asynchronního stavu async
používají metody stavový počítač, zachytávání stavu proměnných v uzavřeních implementovaných v třídách a vlastnostech generovaných kompilátorem. Odkaz na místní proměnnou (v zásobníku) nelze zachytit v instanci třídy v haldě, takže kompilátor vydá chybu.
Příklad
Následující ukázka vygeneruje CS8177 před 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);
}
}
}
Oprava této chyby
ref
Odeberte modifikátor. Nebo můžete upgradovat na C# 13, který se dodává s .NET 9.
class C
{
public async static Task Test()
{
await Task.CompletedTask;
foreach (int x in new E())
{
System.Console.Write(x);
}
}
}
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.