Tengo una interfaz que se escribe así:
public interface IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync();
}
Quiero escribir una implementación vacía que no devuelva ningún elemento, así:
public class EmptyItemRetriever : IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync()
{
// What do I put here if nothing is to be done?
}
}
Si fuera un IEnumerable simple, lo haría return Enumerable.Empty<string>();
, pero no encontré ninguno AsyncEnumerable.Empty<string>()
.
Soluciones alternativas
Encontré esto que funciona pero es bastante extraño:
public async IAsyncEnumerable<string> GetItemsAsync()
{
await Task.CompletedTask;
yield break;
}
¿Alguna idea?
c#
c#-8.0
iasyncenumerable
cubo45
fuente
fuente
System.Linq.Async
como "prácticamente parte del marco". Hay muy poco lo que es justo en netstandard2.1 cuando se trata deIAsyncEnumerable<T>
.Si por alguna razón no desea instalar el paquete que se menciona en la respuesta de Jon, puede crear el método de
AsyncEnumerable.Empty<T>()
esta manera:Nota: La respuesta no desalienta el uso del
System.Linq.Async
paquete. Esta respuesta proporciona una breve implementación de losAsyncEnumerable.Empty<T>()
casos en los que lo necesita y no puede / no quiere usar el paquete. Puede encontrar la implementación utilizada en el paquete aquí .fuente