public static async Task UnregisterObservableAsync(string topic, EntityId observerEntityId, EntityId observableEntityId, List <EntityId> observerList)
 {
     for (int k = 1; k <= ConfigurationHelper.MaxQueryRetryCount; k++)
     {
         try
         {
             if (observerEntityId.Kind == EntityKind.Actor)
             {
                 IServerObserverActor actorProxy = ActorProxy.Create <IServerObserverActor>(observerEntityId.ActorId, observerEntityId.ServiceUri);
                 await actorProxy.UnregisterObservableAsync(topic, observableEntityId, observerList);
             }
             else
             {
                 IServerObserverService serviceProxy = observerEntityId.PartitionKey.HasValue
                     ? ServiceProxy.Create <IServerObserverService>(
                     observerEntityId.ServiceUri,
                     new ServicePartitionKey(observerEntityId.PartitionKey.Value))
                     : ServiceProxy.Create <IServerObserverService>(observerEntityId.ServiceUri);
                 await serviceProxy.UnregisterObservableAsync(topic, observableEntityId, observerList);
             }
             return;
         }
         catch (FabricTransientException ex)
         {
             ActorEventSource.Current.Error(ex);
             if (k == ConfigurationHelper.MaxQueryRetryCount)
             {
                 throw;
             }
         }
         catch (AggregateException ex)
         {
             foreach (Exception innerException in ex.InnerExceptions)
             {
                 ActorEventSource.Current.Error(innerException);
             }
             if (k == ConfigurationHelper.MaxQueryRetryCount)
             {
                 throw;
             }
         }
         catch (Exception ex)
         {
             ActorEventSource.Current.Error(ex);
             if (k == ConfigurationHelper.MaxQueryRetryCount)
             {
                 throw;
             }
         }
         await Task.Delay(ConfigurationHelper.BackoffQueryDelay);
     }
 }
 public static async Task NotifyObserverAsync(
     string topic, Message message, EntityId observerEntityId, EntityId observableEntityId, List <EntityId> observerList)
 {
     for (int k = 1; k <= ConfigurationHelper.MaxQueryRetryCount; k++)
     {
         try
         {
             if (observerEntityId.Kind == EntityKind.Actor)
             {
                 IServerObserverActor actorProxy = ActorProxy.Create <IServerObserverActor>(observerEntityId.ActorId, observerEntityId.ServiceUri);
                 await actorProxy.NotifyObserverAsync(topic, message, observableEntityId, observerList);
             }
             else
             {
                 IServerObserverService serviceProxy = observerEntityId.PartitionKey.HasValue
                     ? ServiceProxy.Create <IServerObserverService>(
                     observerEntityId.ServiceUri,
                     new ServicePartitionKey(observerEntityId.PartitionKey.Value))
                     : ServiceProxy.Create <IServerObserverService>(observerEntityId.ServiceUri);
                 await serviceProxy.NotifyObserverAsync(topic, message, observableEntityId, observerList);
             }
             return;
         }
         catch (FabricTransientException ex)
         {
             ActorEventSource.Current.Error(ex);
         }
         catch (AggregateException ex)
         {
             foreach (Exception innerException in ex.InnerExceptions)
             {
                 ActorEventSource.Current.Error(innerException);
             }
         }
         catch (Exception ex)
         {
             ActorEventSource.Current.Error(ex);
         }
         await Task.Delay(ConfigurationHelper.BackoffQueryDelay);
     }
     WriteMessageToMessageBoxAsync(observerEntityId.EntityUri, message).Wait();
     if ((observerList != null) && observerList.Any())
     {
         Tuple <EntityId, List <EntityId> > tuple = GetObserverProxyAndList(observerList, true);
         await NotifyObserverAsync(topic, message, tuple.Item1, observableEntityId, tuple.Item2);
     }
 }