Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
869 B

using AsyncAwaitBestPractices;
using StabilityMatrix.Core.Services;
namespace StabilityMatrix.Core.Models.Settings;
/// <summary>
/// Transaction object which saves settings manager changes when disposed.
/// </summary>
public class SettingsTransaction : IDisposable, IAsyncDisposable
{
private readonly ISettingsManager settingsManager;
private readonly Func<Task> onCommit;
public Settings Settings => settingsManager.Settings;
public SettingsTransaction(ISettingsManager settingsManager, Func<Task> onCommit)
{
this.settingsManager = settingsManager;
this.onCommit = onCommit;
}
public void Dispose()
{
onCommit().SafeFireAndForget();
GC.SuppressFinalize(this);
}
public async ValueTask DisposeAsync()
{
await onCommit();
GC.SuppressFinalize(this);
}
}