12
votes

Comment utiliser ASYNC sur une méthode d'interface vide

dire que j'ai une interface xxx

et je voulais mettre en œuvre cette interface, mais pour une classe, la méthode est vide.

devrais-je vivre avec l'avertissement produit? xxx

ou dois-je renvoyer une tâche manneule? xxx

ou y a-t-il une autre option?

aussi je veux mettre en œuvre cette méthode comme méthode d'interface explicite. Cela fera-t-il une différence?


1 commentaires

3 Réponses :


2
votes

Cela dépend seulement de la manière dont vous décidez que ce cadre doit gérer de tels cas.

Vous avez, imo, plusieurs options:

  • Soulevez une exception (cassera immédiatement l'exécution, et vous devez manipuler il est d'une manière ou d'une autre dans un endroit dans une chaîne d'exécution).

  • retour valeur par défaut (qui peut être une solution proposée par vous: juste une tâche vide qui ne fait rien. Mauvais à ce sujet est que je appelle la fonction attendre Cela fait quelque chose, cela ne m'indique pas de quoi que ce soit, mais ne fais rien non plus. Imo, c'est mauvais design.

  • Renvoie certains non valide-value , qui intercepté par l'appelant afin que l'appelant "sait" que quelque chose ne soit pas ok .


0 commentaires

14
votes

Méthodes qui renvoient Task code> ne doivent pas nécessairement être async code>.

Je recommanderais quelque chose comme ceci: p>

Task IFoo.SomeMethodAsync()
{
  return Task.FromResult(true);
}


0 commentaires

1
votes

Je l'ai couru avec une classe de base abstraite. J'ai essayé la méthode de Stephen Cleary, mais obteniez des erreurs de compilateur en C # 6.

un exemple de ma méthode de base: p> xxx pré>

C'est ce que je devais faire dans mon dérivé Classe: P>

protected override async Task OnFoo(Bar bar)
{
    await Task.FromResult(true);
}


0 commentaires