Ваш текущий план, кажется, зависит от возможности путешествовать во времени. Я бы посоветовал просто хранить неподходящие элементы в очереди (а не выдавать их), пока не найдете подходящий элемент со значением TestFieldA
.
В этот момент вы удаляете все элементы из очереди, используйте команду now найдено значение и доходность каждого по очереди. Затем выдайте предмет с желаемым значением TestFieldA
.
То, как вы поступаете, немного неясно, потому что я не знаю, что вы хотите сделать, если а) найден другой элемент a
и б) что делать, если элемент a
не найден.
Здесь нет необходимости Task
(CompletionSource
), async
или IAsyncEnumerable
- вы не можете ничего выдать, пока не найдете свой a
значение - если у вас нет доступа к машине времени.
Имейте также в виду, что итераторы зависят от того, чтобы вызывающие их лица неоднократно запрашивали новые элементы для продвижения вперед - вы останавливаетесь на каждом yield
пока они не делают. Таким образом, было бы крайне рискованно рассмотреть возможность попробовать yield
предметов рано, если у полученных предметов есть что-то "Task
подобное"; Вызывающий абонент может решить await
на одном, а не продолжать перечисление, в котором вы нуждаетесь.