Почему IAsyncEnumerator не имеет метода Reset в C # 8? - PullRequest
1 голос
/ 13 апреля 2019

Почему у IAsyncEnumerator нет метода Reset?Он имеет только свойство Current и метод MoveNextAsync ().

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

    ValueTask<bool> MoveNextAsync();
}

1 Ответ

5 голосов
/ 13 апреля 2019

Из документов на IEnumerator.Reset:

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

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

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

...