public static bool ProcessOwnerSubscriptionChains(IContainerOwner lockedOwner, string acquiredEtag, string containerName) { try { if (containerName != null) { InformationContext.Current.InitializeCloudStorageAccess(containerName: containerName); } string[] blobs = SubscribeSupport.GetChainRequestList(lockedOwner); var chainContent = blobs.Select(blob => StorageSupport.RetrieveInformation(blob, typeof(SubscriptionChainRequestContent))).Cast <SubscriptionChainRequestContent>().ToArray(); const double invalidSubscriptionSubmissionTimeInSeconds = 600; if (chainContent.Any(item => item.SubmitTime < DateTime.UtcNow.AddSeconds(-invalidSubscriptionSubmissionTimeInSeconds))) { return(false); } WorkerSupport.ExecuteSubscriptionChains(chainContent); foreach (string blob in blobs) { StorageSupport.DeleteBlob(blob); } } catch (Exception ex) { ErrorSupport.ReportException(ex); throw; } finally { SubscribeSupport.ReleaseChainLock(lockedOwner, acquiredEtag); if (containerName != null) { InformationContext.ProcessAndClearCurrent(); } } counter++; if (counter >= 1000) { QueueSupport.ReportStatistics("Processed " + counter + " messages..."); counter = 0; } return(true); }