public virtual async Task SaveAsync(Blob blob) { var path = File(blob); if (path == null) { throw new InvalidOperationException("This blob is not linked to any entity."); } var fileDataToSave = await blob.GetFileDataAsync(); // Because file data will be lost in delete. if (path.Exists()) { using (await GetAsyncLock(path.FullName).Lock()) { var data = await path.ReadAllBytesAsync(); if (data == null) { await DeleteAsync(blob); } else if (data.SequenceEqual(await blob.GetFileDataAsync())) { return; // Nothing changed. } else { await DeleteAsync(blob); } } } using (await GetAsyncLock(path.FullName).Lock()) await path.WriteAllBytesAsync(fileDataToSave); }
public virtual async Task SaveAsync(Blob blob) { var path = File(blob); if (path == null) { throw new InvalidOperationException("This blob is not linked to any entity."); } var fileDataToSave = await blob.GetFileDataAsync(); // Because file data will be lost in delete. await DeleteAsync(blob); await path.WriteAllBytesAsync(fileDataToSave); }