public static async Task <IEnumerable <IStorageListBlobItem> > ListBlobsAsync(this IStorageBlobClient client,
                                                                                      string prefix, bool useFlatBlobListing, BlobListingDetails blobListingDetails,
                                                                                      CancellationToken cancellationToken)
        {
            if (client == null)
            {
                throw new ArgumentNullException("client");
            }

            List <IStorageListBlobItem> allResults   = new List <IStorageListBlobItem>();
            BlobContinuationToken       currentToken = null;
            IStorageBlobResultSegment   result;

            do
            {
                result = await client.ListBlobsSegmentedAsync(prefix, useFlatBlobListing, blobListingDetails,
                                                              maxResults : null, currentToken : currentToken, options : null, operationContext : null,
                                                              cancellationToken : cancellationToken);

                if (result != null)
                {
                    IEnumerable <IStorageListBlobItem> currentResults = result.Results;

                    if (currentResults != null)
                    {
                        allResults.AddRange(currentResults);
                    }
                }
            }while (result != null && result.ContinuationToken != null);

            return(allResults);
        }