public IFileCollectionFile AddFile(string humanHint)
{
var index = (uint)Interlocked.Increment(ref _maxFileId);
var file = new File(this, index);
Dictionary<uint, File> newFiles;
Dictionary<uint, File> oldFiles;
do
{
oldFiles = _files;
newFiles = new Dictionary<uint, File>(oldFiles) { { index, file } };
} while (Interlocked.CompareExchange(ref _files, newFiles, oldFiles) != oldFiles);
return file;
}