【发布时间】:2014-04-14 15:58:50
【问题描述】:
我正在学习使用 RX 并尝试了这个示例。但无法修复突出显示的 while 语句中发生的异常 - while(!f.EndofStream)
我想逐行读取一个巨大的文件,并且对于每一行数据,我想在不同的线程中进行一些处理(所以我使用了 ObserverOn) 我想要整个事情异步。我想使用 ReadLineAsync,因为它返回 TASK,所以我可以将它转换为 Observables 并订阅它。
我猜我首先创建的任务线程位于 Rx 线程之间。但即使我使用 currentThread 使用 Observe 和 Subscribe,我仍然无法阻止异常。想知道我是如何使用 Rx 巧妙地完成这个 Aysnc 的。
想知道整个事情是否可以做得更简单?
static void Main(string[] args)
{
RxWrapper.ReadFileWithRxAsync();
Console.WriteLine("this should be called even before the file read begins");
Console.ReadLine();
}
public static async Task ReadFileWithRxAsync()
{
Task t = Task.Run(() => ReadFileWithRx());
await t;
}
public static void ReadFileWithRx()
{
string file = @"C:\FileWithLongListOfNames.txt";
using (StreamReader f = File.OpenText(file))
{
string line = string.Empty;
bool continueRead = true;
***while (!f.EndOfStream)***
{
f.ReadLineAsync()
.ToObservable()
.ObserveOn(Scheduler.Default)
.Subscribe(t =>
{
Console.WriteLine("custom code to manipulate every line data");
});
}
}
}
【问题讨论】:
-
异常类型、消息和堆栈跟踪是什么?
标签: c# .net async-await system.reactive