Nachdem C # 5 das asyncund await-Modell für die asynchrone Programmierung eingeführt hatte, gelangte die C # -Community zu einer Namenskonvention, um Methoden, die einen erwarteten Typ zurückgeben, ein "Async" -Suffix hinzuzufügen:
interface Foo
{
Task BarAsync();
}
Viele statische Codeanalysatoren (sowohl Roslyn-basiert als auch nicht Roslyn-basiert) wurden seitdem so geschrieben, dass sie von dieser Namenskonvention abhängen, wenn Codegeruch bei asynchroner Programmierung erkannt wird.
Nachdem C # 8 das Konzept der asynchronen Aufzählungen eingeführt hat, die selbst nicht zu erwarten sind, aber in Verbindung mit verwendet werden können await foreach, scheint es zwei Optionen für die Rückgabe von Benennungsmethoden zu geben IAsyncEnumerable:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
oder
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Gab es eine endgültige Richtlinie für Namenskonventionen (vom C # -Sprachteam, der .NET Foundation oder anderen Behörden) zu den oben genannten Optionen, z. B. wie die C # 5-Namenskonvention eindeutig standardisiert und nicht der meinungsbasierten Beurteilung von Programmierern überlassen wurde?
AsyncSuffix für Methoden, die zurückgeben IAsyncEnumerable, z . B. ChannelReader.ReadAllAsync . In anderen Fällen, zB in EF Core, AsAsyncEnumerable()wird verwendet, was bereits klar ist
asyncund imawaitInneren verwenden) und das msdn-Beispiel dasselbe zeigt