using GFramework.Core.Abstractions.Pause;
namespace GFramework.Core.Pause;
///
/// 暂停作用域,支持 using 语法自动管理暂停生命周期
///
public class PauseScope : IDisposable
{
private readonly IPauseStackManager _manager;
private readonly PauseToken _token;
private bool _disposed;
///
/// 创建暂停作用域
///
/// 暂停栈管理器
/// 暂停原因
/// 暂停组
public PauseScope(IPauseStackManager manager, string reason, PauseGroup group = PauseGroup.Global)
{
_manager = manager ?? throw new ArgumentNullException(nameof(manager));
_token = _manager.Push(reason, group);
}
///
/// 释放作用域,自动恢复暂停
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 释放资源
///
/// 是否正在显式释放
protected virtual void Dispose(bool disposing)
{
if (_disposed)
return;
if (disposing)
{
_manager.Pop(_token);
}
_disposed = true;
}
}