Я создаю общий xml-репозиторий, который использует datacontractserializer для сериализации / десериализации файлов, и я не уверен, как гарантировать, что файлы не могут быть изменены при чтении.
Мой код для чтения всех файлов выглядит так:
public IQueryable<T> All<T>() where T : class, new()
{
List<T> instances = new List<T>();
DirectoryInfo datadirectory = new DirectoryInfo(this.storageLocation);
if (datadirectory.Exists)
{
foreach (FileInfo datafile in datadirectory.GetFiles("*.xml", SearchOption.TopDirectoryOnly))
{
lock (this.syncRoot)
{
instances.Add(this.converter.Build<T>(datafile.FullName));
}
}
}
return instances.AsQueryable();
}
Где преобразователь - сериализатор, а syncRoot - частный объект.
В чем я не уверен, так это где поставить замок? Должно ли это быть так, как указано выше, или я должен обернуть чтение DirectoryInfo?
Я бы хотел иметь возможность распараллелить процесс чтения с использованием parallel.foreach, но ранние эксперименты с обертыванием DirectoryInfo привели к исключениям.
Потоки - это немного загадка для меня, поэтому любая информация будет принята с благодарностью.
Заранее спасибо.