diff --git a/GFramework.Game/data/UnifiedSettingsDataRepository.cs b/GFramework.Game/data/UnifiedSettingsDataRepository.cs index 1de78fd..d2c020d 100644 --- a/GFramework.Game/data/UnifiedSettingsDataRepository.cs +++ b/GFramework.Game/data/UnifiedSettingsDataRepository.cs @@ -45,6 +45,9 @@ public class UnifiedSettingsDataRepository( private UnifiedSettingsFile File => _file ?? throw new InvalidOperationException("UnifiedSettingsFile not set."); + + private string UnifiedKey => GetUnifiedKey(); + // ========================= // IDataRepository // ========================= @@ -76,16 +79,24 @@ public class UnifiedSettingsDataRepository( public async Task SaveAsync(IDataLocation location, T data) where T : class, IData { - await EnsureLoadedAsync(); + await _lock.WaitAsync(); + try + { + await EnsureLoadedAsync(); - var key = location.Key; - var serialized = Serializer.Serialize(data); + var key = location.Key; + var serialized = Serializer.Serialize(data); - _file!.Sections[key] = serialized; + _file!.Sections[key] = serialized; - await Storage.WriteAsync(fileName, _file); - if (_options.EnableEvents) - this.SendEvent(new DataSavedEvent(data)); + await Storage.WriteAsync(UnifiedKey, _file); + if (_options.EnableEvents) + this.SendEvent(new DataSavedEvent(data)); + } + finally + { + _lock.Release(); + } } /// @@ -175,9 +186,11 @@ public class UnifiedSettingsDataRepository( { if (_loaded) return; - if (await Storage.ExistsAsync(fileName)) + var key = UnifiedKey; + + if (await Storage.ExistsAsync(key)) { - _file = await Storage.ReadAsync(fileName); + _file = await Storage.ReadAsync(key); } else { @@ -192,6 +205,7 @@ public class UnifiedSettingsDataRepository( } } + /// /// 将缓存中的所有数据保存到统一文件 /// @@ -200,7 +214,7 @@ public class UnifiedSettingsDataRepository( await _lock.WaitAsync(); try { - await Storage.WriteAsync(GetUnifiedKey(), File); + await Storage.WriteAsync(UnifiedKey, _file); } finally {