C#中的异步和yield关键字

时间:2018-07-12 07:22:02

标签: c# async-await .net-4.5 streamreader yield-return

public static async ???? ReadFileLineByLineAsync(string file)
{

    using(StreamReader s = new StreamReader(file))
    {
        while (!s.EndOfStream)
            yield return await s.ReadLineAsync();
    }
}

我想编写一个异步功能来逐行读取文件。此函数的返回类型应该是什么。我对此表示任何建议。

1 个答案:

答案 0 :(得分:0)

您可以改用Reactive Linq Observable

public static IObservable<string> ReadFileLineByLineAsync(string file)
{
  return Observable.Create<string>(
    (obs, token) =>
      Task.Factory.StartNew(
        () =>
        {
          using (var s = new StreamReader(file))
          {
            while (!s.EndOfStream)
              obs.OnNext(s.ReadLine());
          }
          obs.OnCompleted();
        },
        token));
}