Después de que C # 5 presentó el modelo async
y await
para la programación asincrónica, la comunidad C # llegó a una convención de nomenclatura para agregar un sufijo "Async" a los métodos que devuelven un tipo esperado, como este:
interface Foo
{
Task BarAsync();
}
Desde entonces, se ha escrito que muchos analizadores de código estático (tanto basados en Roslyn como no basados en Roslyn) dependen de esta convención de nomenclatura al detectar el olor del código en torno a la programación asincrónica.
Ahora que C # 8 ha introducido el concepto de enumerables asincrónicos, que no son esperados pero que pueden usarse en conjunto await foreach
, parece que hay dos opciones para devolver los métodos de nombres 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>();
}
¿Ha habido una directriz definitiva para la convención de nomenclatura (del equipo del lenguaje C #, la Fundación .NET u otras autoridades) con respecto a las opciones anteriores, como cómo la convención de nomenclatura C # 5 fue estandarizada sin ambigüedades y no se dejó al criterio de los programadores basado en la opinión?
Async
sufijo para los métodos que regresan IAsyncEnumerable
, por ejemplo, ChannelReader.ReadAllAsync . En otros casos, por ejemplo, en EF Core, AsAsyncEnumerable()
se usa lo que ya está claro
async
y useawait
dentro), y el ejemplo msdn muestra lo mismo