Après que C # 5 a introduit le modèle async
et await
pour la programmation asynchrone, la communauté C # est arrivée à une convention de dénomination pour ajouter un suffixe "Async" aux méthodes renvoyant un type attendu, comme ceci:
interface Foo
{
Task BarAsync();
}
De nombreux analyseurs de code statique (basés sur Roslyn et non basés sur Roslyn) ont depuis été écrits pour dépendre de cette convention de dénomination lors de la détection de l'odeur de code autour de la programmation asynchrone.
Maintenant que C # 8 a introduit le concept des énumérables asynchrones, qui eux-mêmes ne sont pas attendus mais peuvent être utilisés en conjonction avec await foreach
, il semble y avoir deux options pour les méthodes de nommage renvoyant 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>();
}
Existe-t-il une directive de convention de dénomination définitive (de l'équipe du langage C #, de la Fondation .NET ou d'autres autorités) concernant les options ci-dessus, comme la façon dont la convention de dénomination C # 5 a été uniformisée sans ambiguïté et n'a pas été laissée à l'appréciation des programmeurs basée sur l'opinion.
Async
suffixe pour les méthodes qui retournent IAsyncEnumerable
, par exemple ChannelReader.ReadAllAsync . Dans d'autres cas, par exemple dans EF Core, AsAsyncEnumerable()
est utilisé, ce qui est déjà clair
async
et utilisez à l'await
intérieur), et l' exemple msdn montre la même chose