Depois que o C # 5 introduziu o modelo async
e await
para 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?
Async
sufixo 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
async
e usoawait
dentro), e amostras MSDN mostra o mesmo