У меня есть интерфейс, который написан так:
public interface IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync();
}
Я хочу написать пустую реализацию, которая не возвращает элемент, например, так:
public class EmptyItemRetriever : IItemRetriever
{
public IAsyncEnumerable<string> GetItemsAsync()
{
// What do I put here if nothing is to be done?
}
}
Если бы это был простой IEnumerable, я бы return Enumerable.Empty<string>();
это сделал, но я не нашел ни одного AsyncEnumerable.Empty<string>()
.
обходные
Я нашел это, которое работает, но довольно странно:
public async IAsyncEnumerable<string> GetItemsAsync()
{
await Task.CompletedTask;
yield break;
}
Есть идеи?
c#
c#-8.0
iasyncenumerable
cube45
источник
источник
System.Linq.Async
как "фактически часть фреймворка". В netstandard2.1 очень мало всего, что касаетсяIAsyncEnumerable<T>
.Если по какой-либо причине вы не хотите устанавливать пакет, упомянутый в ответе Джона, вы можете создать метод
AsyncEnumerable.Empty<T>()
следующим образом:Примечание: ответ не препятствует использованию
System.Linq.Async
пакета. Этот ответ дает краткую реализациюAsyncEnumerable.Empty<T>()
для случаев, когда он вам нужен, и вы не можете / не хотите использовать пакет. Вы можете найти реализацию, использованную в пакете, здесь .источник