#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
, который также всегда будет реализован путем создания исключения?