162 votes

L'utilisation du suffixe "Async" dans le nom d'une méthode dépend-elle de l'utilisation du modificateur "async" ?

Quelle est la convention pour suffixer les noms de méthodes avec "Async" ?

Faut-il ajouter le suffixe "Async" ? sólo à une méthode qui est déclarée avec l'option async modificateur ?

public async Task<bool> ConnectAsync()

Ou est-il suffisant que la méthode renvoie simplement Task<T> o Task ?

public Task<bool> ConnectAsync()

8voto

DavidRR Points 2211

Sur Programmation asynchrone avec async et await (C#) Microsoft propose les conseils suivants :

Convention de dénomination

Par convention, vous ajoutez "Async" au nom des méthodes qui ont une fonction de type asynchrone modificateur.

Vous pouvez ignorer la convention lorsqu'un événement, une classe de base ou une interface suggère un nom différent. Par exemple, vous ne devez pas renommer les gestionnaires d'événements courants, tels que Button1_Click .

Je trouve cette orientation incomplète et insatisfaisante. Cela signifie-t-il qu'en l'absence de la async cette méthode doit être nommée Connect au lieu de ConnectAsync ?

public Task<bool> ConnectAsync()
{
    return ConnectAsyncInternal();
}

Je ne le pense pas. Comme indiqué dans le réponse concise par @Servy et les plus réponse détaillée par @Luke Puplett je crois qu'il est approprié et même attendu que cette méthode debe être nommé ConnectAsync (parce qu'il renvoie un awaitable). A l'appui de cette affirmation, @John Skeet en cette réponse à une autre question ajoute Async au nom de la méthode, indépendamment de la présence de l'option async modificateur.

Enfin, le une autre question considère ce commentaire par @Damien_The_Unbeliever :

async/await son mise en œuvre les détails de vos méthodes. Il importe que votre méthode soit déclarée ou non async Task Method() ou juste Task Method() dans la mesure où votre appelants sont concernés. (En En fait, vous êtes libre de passer de l'un à l'autre à un moment ultérieur de votre vie. temps sans que cela soit considéré comme un changement de rupture).

De cela, je déduis que c'est la la nature asynchrone de la méthode qui dicte comment il doit être nommé. L'utilisateur de la méthode ne saura même pas si la méthode async est utilisé dans son implémentation (sans le code source C# ou CIL).

7voto

Toni Petrina Points 4745

Depuis Task y Task<T> sont tous deux des types pouvant être attendus, ils représentent un peu de opération asynchrone. Ou du moins, ils devraient le représenter.

Vous devez ajouter le suffixe Async à une méthode qui, dans certains cas (pas nécessairement dans tous), ne renvoie pas une valeur mais plutôt une enveloppe autour d'une opération en cours. Cette enveloppe est généralement un Task mais sous Windows RT, il peut être IAsyncInfo . Suivez votre intuition et rappelez-vous que si un utilisateur de votre code voit l'élément Async il saura que l'invocation de cette méthode est découplée du résultat de cette méthode et qu'il doit agir en conséquence.

Notez qu'il existe des méthodes telles que Task.Delay y Task.WhenAll qui renvoient Task et pourtant n'ont pas le Async suffixe.

Notez également qu'il existe async void qui représentent le feu et l'oubli asynchrone et vous devez savoir que la méthode est construite de cette manière.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X