Je travaille avec une DLL tierce qui expose des méthodes qui renvoient Task
et Task<T>
. Je n'ai aucun contrôle sur cet assemblage ou l'interface, et je suppose que l'auteur a supposé que tout devrait être asynchrone car les noms des méthodes sont * Async() comme indiqué ci-dessous. Par conséquent, comment implémenter correctement l'interface si je n'ai aucun code asynchrone en cours d'exécution?Comment gérez-vous une interface tierce qui renvoie la tâche si vous n'avez pas de code asynchrone?
public interface IFoo
{
Task DoWorkAsync();
Task<int> GetValueAsync();
}
Ma tentative a été la suivante:
public class FooBar : IFoo
{
public async Task DoWorkAsync()
{
// Do Some Work
await Task.Yield();
}
public async Task<int> GetValueAsync()
{
// Do Some Work
var result = ...;
return Task.FromResult(result);
}
}
De plus:
- L'auteur était correct à exposer seulement des méthodes qui sont retournés
Task
/Task<T>
? - L'auteur a-t-il corrigé les noms de méthode de suffixation avec * Async()? L'analyse de code ne se plaint pas si j'écris une méthode asynchrone sans ajouter Async au nom.
Je dirais oui sur les méthodes d'appel 'Async'. Rend clair et simple, esp. lorsque vous mettez à niveau et essayez de rendre les choses rétrocompatibles avec les méthodes 'GetSomething' et' GetSomethingAsync'. – rbm
Je fais généralement la première de vos deux approches. S'il n'y a rien à attendre, il n'y a rien à attendre. Cela semble inutile, mais les bibliothèques tierces sont ce qu'elles sont. – David
@David: Il n'y a pas deux approches montrées, ce sont deux méthodes différentes, dont l'une techniquement n'a pas de retour, c'est pourquoi c'est juste 'Task' au lieu de' Task '. –
michael