什么是C#8.0中的异步流?

C#8.0引入了异步流,该流为数据的流源建模。数据流通常异步检索或生成元素。

现在,生成序列的代码可以使用yield return返回使用async修饰符声明的方法中的元素。

我们可以使用await foreach循环来消耗异步流。

语法如下

static IEnumerable<string> Message(){
   yield return "Hello!";
   yield return "Hello!";
}
Can be replaced by IAsyncEnumerable
static async IAsyncEnumerable<string> MessageAsync(){
   await Task.Delay(2000);
   yield return "Hello!";
   await Task.Delay(2000);
   yield return "Hello!";
}

示例

class Program{
   public static async Task Main(){
      await foreach (var item in MessageAsync()){
         System.Console.WriteLine(item);
      }
      Console.ReadLine();
   }
   static async IAsyncEnumerable<string> MessageAsync(){
      await Task.Delay(2000);
      yield return "Hello!";
      await Task.Delay(2000);
      yield return "Hello!";
   }
}

输出结果

Hello!
Hello!