System.ArgumentException: Waithandle array may not be empty when uploading blobs in parallel threads

When you are uploading blobs from a stream using multiple roles (web or worker) to a single azure storage location it is possible that you may hit the following exception:

 

System.ArgumentException: Waithandle array may not be empty.
at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()

at Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.ExecuteAndWait()

at Microsoft.WindowsAzure.StorageClient.CloudBlob.UploadFromStream(Stream source, BlobRequestOptions options)

at Contoso.Cloud.Integration.Azure.Services.Framework.Storage.ReliableCloudBlobStorage.UploadBlob(CloudBlob blob, Stream data, Boolean overwrite, String eTag)

 

 

Reason:  

The above issue is caused by a known issue, when utilizing parallel uploading for blobs in Storage API and it could occur in very rare occasion if conditions are matched for this issue to appear.

 

Solution:

To solve this problem please disable parallel upload feature by setting as below: CloudBlobClient.ParallelOperationThreadCount=1