Dopo che C # 5 ha introdotto il modello async
e await
per la programmazione asincrona, la comunità C # è arrivata a una convenzione di denominazione per aggiungere un suffisso "Async" ai metodi che restituiscono un tipo attendibile, come questo:
interface Foo
{
Task BarAsync();
}
Da allora, molti analizzatori di codice statico (sia basati su Roslyn che non basati su Roslyn) sono stati scritti in modo da dipendere da questa convenzione di denominazione quando rilevano odore di codice attorno alla programmazione asincrona.
Ora che C # 8 ha introdotto il concetto di enumerabili asincroni, che a loro volta non sono prevedibili ma che possono essere utilizzati insieme await foreach
, sembrano esserci due opzioni per restituire i metodi di denominazione IAsyncEnumerable
:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
o
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
C'è stata una linea guida per la convenzione di denominazione definitiva (dal team linguistico C #, .NET Foundation o altre autorità) riguardo alle opzioni sopra, come il modo in cui la convenzione di denominazione C # 5 è stata standardizzata in modo inequivocabile e non lasciata al giudizio dei programmatori basato sull'opinione?
Async
suffisso per i metodi che restituiscono IAsyncEnumerable
, ad esempio ChannelReader.ReadAllAsync . In altri casi, ad esempio in EF Core, AsAsyncEnumerable()
viene utilizzato che è già chiaro
async
e usaawait
dentro), e l' esempio