Почему у IAsyncEnumerator нет метода сброса в C # 8?

#c# #async-await #c#-8.0

#c# #асинхронное ожидание #c #-8.0

Вопрос:

Почему в IAsyncEnumerator нет метода сброса? У него есть только текущее свойство и метод MoveNextAsync().

 public interface IAsyncEnumerator<out T> : IAsyncDisposable
{
    T Current
    {
        get;
    }

    ValueTask<bool> MoveNextAsync();
}
 

Комментарии:

1. Есть ли причина, по которой, по вашему мнению, он должен иметь? Я не вижу, чтобы это упоминалось в документации.

2. Даже в «обычных» IEnumerables они редко используются. На самом деле, за все мои годы я никогда не видел, чтобы кто-нибудь использовал метод Сброса. Я предполагаю, что это практически неизвестная и неиспользуемая функция, возможно, повлияла на решение не включать ее.

Ответ №1:

Из документации для IEnumerator.Reset :

Метод сброса предусмотрен для взаимодействия с COM. Это не обязательно должно быть реализовано; вместо этого разработчик может просто создать исключение NotSupportedException.

Очень, очень редко можно найти Reset метод, который делает что-либо, кроме создания исключения. Все типы Linq выдают (например, здесь ), а также генерируемые компилятором IEnumerators (см. Здесь ).

Учитывая, что IAsyncEnumerator это никогда не будет взаимодействовать с COM, и учитывая, что в дикой природе не будет никакого кода C #, который полагается на возможность доступа к Reset IEnumerator, зачем добавлять аналогичный метод IAsyncEnumerator , который также всегда будет реализован путем создания исключения?