在我被告知已通过另一个线程向其中写入了一定数量的数据后,我想读取一个文件。
我最初的尝试是在我的 Writer 类中创建一个响应式主题,该主题在写入到它所组成的 BinaryWriter 之后调用 OnNext。此 BinaryWriter 使用 FileStream。
这似乎不起作用。我假设我不能保证写入已被刷新。
我宁愿不手动调用flush。有没有现有的方法可以做到这一点?
问问题
130 次
1 回答
1
在更广泛的层面上,您正在询问线程之间的通信。根据您的喜好和环境,有几种方法可以处理此问题。
如果您还没有,请查看此处和此处的 POSIX 线程。注意讨论条件变量或信号量的部分。
.NET 框架有一个系统线程库,也值得一看。特别是,它同时具有信号量和监视器类。在这种情况下,其中一个可能是您需要的解决方案。
最后,考虑InotifyPropertyChanged接口和/或事件。在这种情况下,它是向读者发出进度信号的替代途径。
一般来说,我建议让您的编写器线程在写入 X 个字节后引发事件更改通知或引发信号量。从那里,读者要么捕捉事件,要么观察信号量并采取相应的行动。
我怀疑监视器类对您没有那么有用,因为锁定可能会阻止同时访问文件。
于 2013-05-14T13:12:27.930 回答