public ICancellableAsyncResult BeginListBlobsSegmented(string prefix, bool useFlatBlobListing, BlobListingDetails blobListingDetails, int?maxResults, BlobContinuationToken currentToken, BlobRequestOptions options, OperationContext operationContext, AsyncCallback callback, object state) { string containerName; string listingPrefix; CloudBlobClient.ParseUserPrefix(prefix, out containerName, out listingPrefix); CloudBlobContainer container = this.GetContainerReference(containerName); ChainedAsyncResult <BlobResultSegment> result = new ChainedAsyncResult <BlobResultSegment>(callback, state); ICancellableAsyncResult asyncResult = container.BeginListBlobsSegmented( listingPrefix, useFlatBlobListing, blobListingDetails, maxResults, currentToken, options, operationContext, ar => { try { result.Result = container.EndListBlobsSegmented(ar); result.OnComplete(); } catch (Exception e) { result.OnComplete(e); } }, null /* state */); result.CancelDelegate = asyncResult.Cancel; return(result); }
public void CloudBlobContainerListBlobsSegmentedAPM() { CloudBlobContainer container = GetRandomContainerReference(); try { container.Create(); List <string> blobNames = CreateBlobs(container, 3, BlobType.PageBlob); using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { BlobContinuationToken token = null; do { IAsyncResult result = container.BeginListBlobsSegmented(null, true, BlobListingDetails.None, 1, token, null, null, ar => waitHandle.Set(), null); waitHandle.WaitOne(); BlobResultSegment results = container.EndListBlobsSegmented(result); int count = 0; foreach (IListBlobItem blobItem in results.Results) { Assert.IsInstanceOfType(blobItem, typeof(CloudPageBlob)); Assert.IsTrue(blobNames.Remove(((CloudPageBlob)blobItem).Name)); count++; } Assert.IsTrue(count >= 1); token = results.ContinuationToken; }while (token != null); Assert.AreEqual(0, blobNames.Count); } } finally { container.DeleteIfExists(); } }