首页 > 解决方案 > c#中的异步和yield关键字

问题描述

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

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

我想编写一个异步函数来逐行读取文件。这个函数的返回类型应该是什么。我将不胜感激有关此的任何建议。

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

解决方案


您可以尝试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));
}

推荐阅读