Mam interfejs napisany w ten sposób:
public interface IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync();
}
Chcę napisać pustą implementację, która nie zwraca żadnego elementu, na przykład:
public class EmptyItemRetriever : IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync()
{
// What do I put here if nothing is to be done?
}
}
Gdyby to był zwykły IEnumerable, zrobiłbym to return Enumerable.Empty<string>();
, ale nie znalazłem żadnego AsyncEnumerable.Empty<string>()
.
Obejścia
Znalazłem to, które działa, ale jest dość dziwne:
public async IAsyncEnumerable<string> GetItemsAsync()
{
await Task.CompletedTask;
yield break;
}
Dowolny pomysł?
c#
c#-8.0
iasyncenumerable
cube45
źródło
źródło
System.Linq.Async
za „praktycznie część frameworka”. Jest bardzo niewiele, co tylko w standardzie netto 2.1IAsyncEnumerable<T>
.Jeśli z jakiegoś powodu nie chcesz instalować pakietu wymienionego w odpowiedzi Jona, możesz utworzyć następującą metodę
AsyncEnumerable.Empty<T>()
:Uwaga: odpowiedź nie zniechęca do korzystania z
System.Linq.Async
pakietu. Ta odpowiedź zawiera krótką implementacjęAsyncEnumerable.Empty<T>()
potrzebnych przypadków i nie możesz / nie chcesz korzystać z pakietu. Implementację zastosowaną w pakiecie można znaleźć tutaj .źródło