public bool UnionWith(MsgSetBlobPack other) { DateTime progress = DateTime.MaxValue; while (progress != DateTime.MinValue) { List <KeyValuePair <DateTime, CloudBlob> > blobsList = GetBlobs(); if (!blobsList.Any()) { return(false); } try { for (int i = blobsList.Count - 1; i >= 0; i--) { Blob <MessageSet> currentBlob = new Blob <MessageSet>(blobsList[i].Value); DateTime upperBound = (i + 1 < blobsList.Count) ? blobsList[i + 1].Key : DateTime.MaxValue; DateTime lowerBound = blobsList[i].Key; if (lowerBound > progress) { continue; } MessageSet set; do { set = GetMessageSet(currentBlob); set.UnionWith(other.GetMessagesBetween(lowerBound, upperBound)); } while (!currentBlob.TrySet(set)); progress = lowerBound; } } catch (VersionHasChanged) { continue; } } return(true); }
public bool UnionWith(MsgSetBlobPack other) { DateTime progress = DateTime.MaxValue; while (progress != DateTime.MinValue) { List<KeyValuePair<DateTime, CloudBlob>> blobsList = GetBlobs(); if (!blobsList.Any()) return false; try { for (int i = blobsList.Count-1; i >=0 ; i--) { Blob<MessageSet> currentBlob = new Blob<MessageSet>(blobsList[i].Value); DateTime upperBound = (i + 1 < blobsList.Count) ? blobsList[i + 1].Key : DateTime.MaxValue; DateTime lowerBound = blobsList[i].Key; if (lowerBound > progress) continue; MessageSet set; do { set = GetMessageSet(currentBlob); set.UnionWith(other.GetMessagesBetween(lowerBound, upperBound)); } while (!currentBlob.TrySet(set)); progress = lowerBound; } } catch (VersionHasChanged) { continue; } } return true; }