Depois que o C # 5 introduziu o modelo asynce awaitpara a programação assíncrona, a comunidade C # chegou a uma convenção de nomenclatura para adicionar um sufixo "Async" aos métodos que retornavam um tipo aguardável, como este:
interface Foo
{
Task BarAsync();
}
Muitos analisadores de código estático (baseados em Roslyn e não em Roslyn) foram escritos para depender dessa convenção de nomenclatura ao detectar o cheiro do código em torno da programação assíncrona.
Agora que o C # 8 introduziu o conceito de enumeráveis assíncronos, que não são aguardáveis, mas podem ser usados em conjunto com await foreach, parece haver duas opções para retornar os métodos de nomeação IAsyncEnumerable:
interface Foo
{
// No "Async" suffix, indicating that the return value is not awaitable.
IAsyncEnumerable<T> Bar<T>();
}
ou
interface Foo
{
// With "Async" suffix, indicating that the overall logic is asynchronous.
IAsyncEnumerable<T> BarAsync<T>();
}
Houve uma diretriz definitiva da convenção de nomenclatura (da equipe de linguagem C #, da .NET Foundation ou de outras autoridades) em relação às opções acima, como a convenção de nomenclatura C # 5 foi padronizada de maneira inequívoca e não deixada ao critério de opinião dos programadores?
Asyncsufixo para métodos que retornam IAsyncEnumerable, por exemplo, ChannelReader.ReadAllAsync . Em outros casos, por exemplo, no EF Core, AsAsyncEnumerable()é usado o que já está claro
asynce usoawaitdentro), e amostras MSDN mostra o mesmo