Как я могу генерировать уведомления о том, что данные, записанные с помощью FileStream, находятся на диске?

Я хотел бы прочитать файл после того, как мне сообщили, что определенный объем данных был записан в него через другой поток.

Моя первоначальная попытка состояла в том, чтобы создать реактивный субъект в моем классе Writer, который вызывает OnNext после записи в BinaryWriter, с которым он состоит. Этот BinaryWriter использует FileStream.
Это, кажется, не работает, хотя. Я предполагаю, что я не гарантирован, что Запись была сброшена.

Я бы предпочел не вызывать флеш вручную. Есть ли способ сделать это?

1 ответ

На более широком уровне вы спрашиваете о связи между потоками. Есть несколько способов справиться с этим в зависимости от ваших предпочтений и среды.

Если вы еще этого не сделали, просмотрите потоки POSIX здесь и здесь. Обратите внимание на разделы, в которых обсуждаются условные переменные или семафоры.

.NET Framework имеет библиотеку System Threading, которую также стоит изучить. В частности, у него есть и семафор, и класс монитора. В этом случае вам может понадобиться одно или другое решение.

Наконец, рассмотрим интерфейс InotifyPropertyChanged и / или события. В этом контексте это альтернативный путь для информирования читателя о прогрессе.

В общем, я бы рекомендовал, чтобы ваш поток писателя генерировал уведомление об изменении события или вызывал семафор после записи X байтов. Оттуда читатель либо поймает событие, либо увидит семафор и будет действовать соответственно.

Я подозреваю, что класс монитора не будет таким полезным для вас, поскольку блокировка, скорее всего, предотвратит одновременный доступ к файлу.

Другие вопросы по тегам