Можно ли ожидать асинхронного перечисления в цикле foreach? - PullRequest
0 голосов
/ 12 января 2019

Мне нужно написать метод, который возвращает IEnumerable объектов асинхронно и цикл Foreach, который проходит через возвращенный IEnumerable объектов этого метода. Я использую .Net Core 2 и не совсем уверен, как подойти к этой задаче. Возможно ли в .netcore2 вернуть асинхронный IEnumerable?

public async IEnumerable<int> MethodThatReturnsObjectsAsync()
{
}

foreach(int item in await MethodThatReturnsObjectsAsync())
{
    Action(item);
}

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Да, хорошо, он вызывается только один раз. Он создает только один конечный автомат (если ваш вызывающий метод - метод async. Т.е. async Task, async Task<T>, Async void)

В вашем случае

public async Task<IEnumerable<int>> Test(Action<something> action)
{
   foreach (int item in await MethodThatReturnsObjectsAsync())
   {
      action(item);
   }

   ...

   return ...
}
private static async Task<IEnumerable<int>> MethodThatReturnsObjectsAsync()
{
   throw new NotImplementedException();
}
0 голосов
/ 12 января 2019

Нет, к сожалению, это невозможно банкомат. NET CORE 3.0 будет поставляться с IASYNCENumerable, который может это сделать, но на данный момент это превью.

...