public void OnTimeout(TimeSpan timeout)
        {
            if (this.IsCompleted)
            {
                return;
            }
            var msg = this.Message; // Local working copy

            string messageHistory = msg.GetTargetHistory();
            string errorMsg       = $"Response did not arrive on time in {timeout} for message: {msg}. Target History is: {messageHistory}.";

            this.shared.Logger.Warn(ErrorCode.Runtime_Error_100157, "{0} About to break its promise.", errorMsg);

            var error = Message.CreatePromptExceptionResponse(msg, new TimeoutException(errorMsg));

            OnFail(msg, error, "OnTimeout - Resend {0} for {1}", true);
        }
        public void OnTargetSiloFail()
        {
            if (this.IsCompleted)
            {
                return;
            }

            var    msg            = this.Message;
            var    messageHistory = msg.GetTargetHistory();
            string errorMsg       =
                $"The target silo became unavailable for message: {msg}. Target History is: {messageHistory}. See {Constants.TroubleshootingHelpLink} for troubleshooting help.";

            this.shared.Logger.Warn(ErrorCode.Runtime_Error_100157, "{0} About to break its promise.", errorMsg);

            var error = Message.CreatePromptExceptionResponse(msg, new SiloUnavailableException(errorMsg));

            OnFail(msg, error, "On silo fail - Resend {0} for {1}");
        }