Nachdem C # 5 das async
und 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?
Async
Suffix 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
async
und imawait
Inneren verwenden) und das msdn-Beispiel dasselbe zeigt