Как я могу генерировать уведомления о том, что данные, записанные с помощью FileStream, находятся на диске?
Я хотел бы прочитать файл после того, как мне сообщили, что определенный объем данных был записан в него через другой поток.
Моя первоначальная попытка состояла в том, чтобы создать реактивный субъект в моем классе Writer, который вызывает OnNext после записи в BinaryWriter, с которым он состоит. Этот BinaryWriter использует FileStream.
Это, кажется, не работает, хотя. Я предполагаю, что я не гарантирован, что Запись была сброшена.
Я бы предпочел не вызывать флеш вручную. Есть ли способ сделать это?
1 ответ
На более широком уровне вы спрашиваете о связи между потоками. Есть несколько способов справиться с этим в зависимости от ваших предпочтений и среды.
Если вы еще этого не сделали, просмотрите потоки POSIX здесь и здесь. Обратите внимание на разделы, в которых обсуждаются условные переменные или семафоры.
.NET Framework имеет библиотеку System Threading, которую также стоит изучить. В частности, у него есть и семафор, и класс монитора. В этом случае вам может понадобиться одно или другое решение.
Наконец, рассмотрим интерфейс InotifyPropertyChanged и / или события. В этом контексте это альтернативный путь для информирования читателя о прогрессе.
В общем, я бы рекомендовал, чтобы ваш поток писателя генерировал уведомление об изменении события или вызывал семафор после записи X байтов. Оттуда читатель либо поймает событие, либо увидит семафор и будет действовать соответственно.
Я подозреваю, что класс монитора не будет таким полезным для вас, поскольку блокировка, скорее всего, предотвратит одновременный доступ к файлу.