using Azure; namespace Net.Sdk.Web.Extensions.Azure; internal sealed class InterceptingAsyncPageable : AsyncPageable where T : notnull { private readonly Action> interceptPage; private readonly Action interceptSuccess; private readonly AsyncPageable originalPageable; public InterceptingAsyncPageable(AsyncPageable originalPageable, Action> interceptPage, Action interceptSuccess) { this.originalPageable = originalPageable; this.interceptPage = interceptPage; this.interceptSuccess = interceptSuccess; } public override async IAsyncEnumerable> AsPages(string? continuationToken = null, int? pageSizeHint = null) { await foreach (var page in this.originalPageable.AsPages(continuationToken, pageSizeHint)) { this.interceptPage(page); yield return page; } } public async override IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { await foreach (var item in this.originalPageable) { this.interceptSuccess(); yield return item; } } }