/// <summary>
        /// Find the corresponding work-flow queue for a given grain interface
        /// type that the current IndexableGrain implements
        /// </summary>
        /// <param name="iGrainType">the given grain interface type</param>
        /// <returns>the work-flow queue corresponding to the iGrainType</returns>
        internal IIndexWorkflowQueue GetWorkflowQueue(Type iGrainType)
        {
            if (this.WorkflowQueues == null)
            {
                this.WorkflowQueues = new Dictionary <Type, IIndexWorkflowQueue>();
            }

            if (!this.WorkflowQueues.TryGetValue(iGrainType, out IIndexWorkflowQueue workflowQ))
            {
                workflowQ = IndexWorkflowQueueBase.GetIndexWorkflowQueueFromGrainHashCode(this.SiloIndexManager, iGrainType,
                                                                                          this.AsReference <IIndexableGrain>(this.SiloIndexManager, iGrainType).GetHashCode(), BaseSiloAddress);
                this.WorkflowQueues.Add(iGrainType, workflowQ);
            }
            return(workflowQ);
        }
        /// <summary>
        /// Find the corresponding work-flow queue for a given grain interface
        /// type that the current IndexableGrain implements
        /// </summary>
        /// <param name="iGrainType">the given grain interface type</param>
        /// <returns>the work-flow queue corresponding to the iGrainType</returns>
        internal IIndexWorkflowQueue GetWorkflowQueue(Type iGrainType)
        {
            if (WorkflowQueues == null)
            {
                WorkflowQueues = new Dictionary <Type, IIndexWorkflowQueue>();
            }

            IIndexWorkflowQueue workflowQ;

            if (!WorkflowQueues.TryGetValue(iGrainType, out workflowQ))
            {
                workflowQ = IndexWorkflowQueueBase.GetIndexWorkflowQueueFromGrainHashCode(iGrainType, this.AsReference <IIndexableGrain>(GrainFactory, iGrainType).GetHashCode(), RuntimeAddress);
                WorkflowQueues.Add(iGrainType, workflowQ);
            }
            return(workflowQ);
        }