using GFramework.Core.Abstractions.Utility;
namespace GFramework.Core.Abstractions.Pause;
///
/// 暂停栈管理器接口,管理嵌套暂停状态
///
public interface IPauseStackManager : IContextUtility
{
///
/// 推入暂停请求
///
/// 暂停原因(用于调试)
/// 暂停组
/// 暂停令牌(用于后续恢复)
PauseToken Push(string reason, PauseGroup group = PauseGroup.Global);
///
/// 弹出暂停请求
///
/// 暂停令牌
/// 是否成功弹出
bool Pop(PauseToken token);
///
/// 查询指定组是否暂停
///
/// 暂停组
/// 是否暂停
bool IsPaused(PauseGroup group = PauseGroup.Global);
///
/// 获取指定组的暂停深度(栈中元素数量)
///
/// 暂停组
/// 暂停深度
int GetPauseDepth(PauseGroup group = PauseGroup.Global);
///
/// 获取指定组的所有暂停原因
///
/// 暂停组
/// 暂停原因列表
IReadOnlyList GetPauseReasons(PauseGroup group = PauseGroup.Global);
///
/// 创建暂停作用域(支持 using 语法)
///
/// 暂停原因
/// 暂停组
/// 可释放的作用域对象
IDisposable PauseScope(string reason, PauseGroup group = PauseGroup.Global);
///
/// 清空指定组的所有暂停请求
///
/// 暂停组
void ClearGroup(PauseGroup group);
///
/// 清空所有暂停请求
///
void ClearAll();
///
/// 注册暂停处理器
///
/// 处理器实例
void RegisterHandler(IPauseHandler handler);
///
/// 注销暂停处理器
///
/// 处理器实例
void UnregisterHandler(IPauseHandler handler);
///
/// 暂停状态变化事件。
/// 事件遵循标准 .NET 事件模式,事件源为触发通知的暂停管理器实例,
/// 事件数据由 提供。
///
event EventHandler? OnPauseStateChanged;
}