private async IAsyncEnumerable ListDocumentsAsync( OrgSlug org, DocumentRelativePath? startAfter, [EnumeratorCancellation] CancellationToken cancellationToken) { var isFirstRequest = true; var requestBuilder = () => { var r = new ListObjectsV2Request { Prefix = org.ToString(), StartAfter = isFirstRequest && startAfter is { } doc ? new DocumentKey(org, doc.Type, doc.Name).ToString() : null, }; isFirstRequest = false; return r; }; await foreach (var obj in EnumerateObjectsAsync(requestBuilder, cancellationToken)) if (DocumentKey.TryFromS3Key(obj.Key, out var key)) yield return key.Value; }