J'ai une interface qui est écrite comme ceci:
public interface IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync();
}
Je veux écrire une implémentation vide qui ne renvoie aucun élément, comme ceci:
public class EmptyItemRetriever : IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync()
{
// What do I put here if nothing is to be done?
}
}
Si c'était un simple IEnumerable, je le ferais return Enumerable.Empty<string>();
, mais je n'en ai pas trouvé AsyncEnumerable.Empty<string>()
.
Solutions de contournement
J'ai trouvé cela qui fonctionne mais qui est assez bizarre:
public async IAsyncEnumerable<string> GetItemsAsync()
{
await Task.CompletedTask;
yield break;
}
Une idée?
c#
c#-8.0
iasyncenumerable
cube45
la source
la source
System.Linq.Async
comme "faisant pratiquement partie du cadre". Il y a très peu de choses qui sont juste dans netstandard2.1 en ce qui concerneIAsyncEnumerable<T>
.Si pour une raison quelconque vous ne souhaitez pas installer le package mentionné dans la réponse de Jon, vous pouvez créer la méthode
AsyncEnumerable.Empty<T>()
comme ceci:Remarque: La réponse ne décourage pas l'utilisation du
System.Linq.Async
package. Cette réponse fournit une brève implémentation deAsyncEnumerable.Empty<T>()
pour les cas où vous en avez besoin et que vous ne pouvez / ne voulez pas utiliser le package. Vous pouvez trouver l'implémentation utilisée dans le package ici .la source