public static IEnumerableAsync <CloudTable> GetTables(this CloudTableClient tableClient) { var ranOnce = false; var continuationToken = default(TableContinuationToken); return(EnumerableAsync.YieldBatch <CloudTable>( async(yieldReturn, yieldBreak) => { if (continuationToken.IsDefaultOrNull()) { if (ranOnce) { return yieldBreak; } } ranOnce = true; var segment = await tableClient.ListTablesSegmentedAsync(continuationToken); continuationToken = segment.ContinuationToken; if (!segment.Results.Any()) { return yieldBreak; } return yieldReturn(segment.Results.ToArray()); })); }