У меня есть массив объектов, каждый из которых должен загрузить себя из данных двоичного файла.Я создаю массив этих объектов, а затем вызываю AsyncAction для каждого из них, который начинает его чтение в своих данных.Проблема в том, что они загружаются не полностью - они, как правило, получают только часть данных из файлов.Как я могу убедиться, что все прочитано?Вот схема кода: сначала я перечисляю содержимое папки, чтобы получить StorageFile для каждого файла, который она содержит.Затем в цикле for каждый принимающий объект создается и передается следующий StorageFile, и он создает свой собственный буфер и DataReader для обработки чтения.m_file_bytes - это std :: vector.
m_buffer = co_await FileIO::ReadBufferAsync(nextFile);
m_data_reader = winrt::Windows::Storage::Streams::DataReader::FromBuffer(m_buffer);
m_file_bytes.resize(m_buffer.Length());
m_data_reader.ReadBytes(m_file_bytes);
Я думал, что, поскольку буфер и читатель являются членами класса объекта, они не выйдут из области видимости и смогут завершить свою работу без перебоев, так как следующие объекты былипопросил загрузить себя в отдельные AsyncActions.Но DataReader получает только половину данных файла или меньше.Что можно сделать, чтобы убедиться, что оно завершено?Спасибо за любые идеи.
[Обновить] Возможно, дело в том, что файловая система может обрабатывать только одну задачу чтения за раз, и при запуске всех этих асинхронных операций чтения каждая прерывает предыдущую -?Но должен быть способ постепенного чтения папки, полной файлов.
[Обновление] Я думаю, что она работает, приняв принцип концентрических циклов - идея не в том, чтобы перейти к следующей загрузке, покаПервый закончен.Я думаю - кто-то может исправить меня, если я ошибаюсь, что файловая система не может выполнять одновременное чтение.Если есть приемлемый и надежный пример того, как это сделать, я все равно хотел бы услышать об этом, поэтому я не отвечаю на свой вопрос.