C# c中的Async和yield关键字#

C# c中的Async和yield关键字#,c#,async-await,.net-4.5,streamreader,yield-return,C#,Async Await,.net 4.5,Streamreader,Yield Return,我想写一个异步函数来逐行读取文件。此函数的返回类型应该是什么。如果您能就此提出任何建议,我将不胜感激 您可以尝试使用反应式Linq Observable: public static async ???? ReadFileLineByLineAsync(string file) { using(StreamReader s = new StreamReader(file)) { while (!s.EndOfStream) yield r

我想写一个异步函数来逐行读取文件。此函数的返回类型应该是什么。如果您能就此提出任何建议,我将不胜感激

您可以尝试使用
反应式Linq Observable

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

    using(StreamReader s = new StreamReader(file))
    {
        while (!s.EndOfStream)
            yield return await s.ReadLineAsync();
    }
}
publicstaticiobservable ReadFileLineByLineAsync(字符串文件)
{
返回可观察的。创建(
(obs,令牌)=>
Task.Factory.StartNew(
() =>
{
使用(var s=新的StreamReader(文件))
{
而(!s.EndOfStream)
obs.OnNext(s.ReadLine());
}
obs.OnCompleted();
},
代币);
}

IEnumerable
?afaik、
async
yield
不能一起使用。这两个关键字都会导致创建执行异步锅炉板代码(或分别执行枚举器代码)的新类,并且这些概念不能组合(至少在当前的c#版本中)您应该去@BarrJ No!这种问题在codereview上完全是离题的
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));
}