示例#1
0
        /// <summary>
        /// Whether an incoming message can interleave
        /// </summary>
        /// <param name="targetActivation"></param>
        /// <param name="incoming"></param>
        /// <returns></returns>
        public bool CanInterleave(ActivationData targetActivation, Message incoming)
        {
            bool canInterleave =
                catalog.CanInterleave(targetActivation.ActivationId, incoming) ||
                incoming.IsAlwaysInterleave ||
                targetActivation.Running == null ||
                (targetActivation.Running.IsReadOnly && incoming.IsReadOnly);

            return(canInterleave);
        }
示例#2
0
        /// <summary>
        /// Whether an incoming message can interleave
        /// </summary>
        /// <param name="targetActivation"></param>
        /// <param name="incoming"></param>
        /// <returns></returns>
        public bool CanInterleave(ActivationData targetActivation, Message incoming)
        {
            bool canInterleave =
                incoming.IsAlwaysInterleave ||
                targetActivation.Blocking == null ||
                (targetActivation.Blocking.IsReadOnly && incoming.IsReadOnly) ||
                (schedulingOptions.AllowCallChainReentrancy && targetActivation.ActivationId.Equals(incoming.SendingActivation)) ||
                catalog.CanInterleave(targetActivation.ActivationId, incoming);

            return(canInterleave);
        }
示例#3
0
        /// <summary>
        /// Whether an incoming message can interleave
        /// </summary>
        /// <param name="targetActivation"></param>
        /// <param name="incoming"></param>
        /// <returns></returns>
        public bool CanInterleave(ActivationData targetActivation, Message incoming)
        {
            bool canInterleave =
                incoming.IsAlwaysInterleave ||
                targetActivation.Running == null ||
                (targetActivation.Running.IsReadOnly && incoming.IsReadOnly) ||
                IsCallChainReentrancyAllowed(targetActivation, incoming) ||
                catalog.CanInterleave(targetActivation.ActivationId, incoming);

            return(canInterleave);
        }
示例#4
0
        /// <summary>
        /// Whether an incoming message can interleave
        /// </summary>
        /// <param name="targetActivation"></param>
        /// <param name="incoming"></param>
        /// <returns></returns>
        public bool CanInterleave(ActivationData targetActivation, Message incoming)
        {
            bool canInterleave =
                incoming.IsAlwaysInterleave ||
                targetActivation.Running == null ||
                targetActivation.Running.IsReadOnly && incoming.IsReadOnly ||
                schedulingOptions.AllowCallChainReentrancy &&
                IsMessageACallChainLoop(incoming) ||
                catalog.CanInterleave(targetActivation.ActivationId, incoming);

            return(canInterleave);
        }