Eu tenho uma interface que é escrita assim:
public interface IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync();
}
Eu quero escrever uma implementação vazia que não retorna nenhum item, assim:
public class EmptyItemRetriever : IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync()
{
// What do I put here if nothing is to be done?
}
}
Se fosse um IEnumerable simples, eu o faria return Enumerable.Empty<string>();
, mas não encontrei nenhum AsyncEnumerable.Empty<string>()
.
Soluções alternativas
Achei isso que funciona, mas é bastante estranho:
public async IAsyncEnumerable<string> GetItemsAsync()
{
await Task.CompletedTask;
yield break;
}
Qualquer ideia?
c#
c#-8.0
iasyncenumerable
cube45
fonte
fonte
System.Linq.Async
"virtualmente parte da estrutura". Há muito pouco que é apenas em netstandard2.1 quando se trata deIAsyncEnumerable<T>
.Se, por algum motivo, você não quiser instalar o pacote mencionado na resposta de Jon, poderá criar o método da
AsyncEnumerable.Empty<T>()
seguinte maneira:Nota: A resposta não desencoraja o uso do
System.Linq.Async
pacote. Esta resposta fornece uma breve implementação dosAsyncEnumerable.Empty<T>()
casos que você precisa e não pode / não deseja usar o pacote. Você pode encontrar a implementação usada no pacote aqui .fonte