是否可以在foreach循环中等待async-enumerable?

时间:2019-01-12 16:24:21

标签: c# asynchronous async-await

我需要编写一个以异步方式返回对象的IEnumerable的方法,以及通过该方法返回的对象的IEnumerable的Foreach循环。 我正在使用.Net Core 2,但不太确定如何执行此任务。 .netcore2是否可以返回异步IEnumerable?

public async IEnumerable<int> MethodThatReturnsObjectsAsync()
{
}

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

谢谢。

2 个答案:

答案 0 :(得分:1)

是的,它只被调用一次。它只会创建一个状态机(如果您的调用方法是async方法。即async Taskasync 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();
}

答案 1 :(得分:0)

否,很遗憾,不可能使用ATM。 NET CORE 3.0将附带IASYNCENumerable,IASYNCENumerable可以做到这一点,但这只是现在的先例。

相关问题