private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, ConsoleColor color)
        {
            int x = session_state.LastProcessedCount + 1;

            long seq2 = 0;

            while (true)
            {
                if (!session_state.DeferredList.TryGetValue(x, out seq2))
                {
                    break;
                }

                //-------------------------------
                var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2);

                if (ProcessMessages(deferredMessage, color))
                {
                    await session.CompleteAsync(deferredMessage.SystemProperties.LockToken);

                    if (deferredMessage.UserProperties["IsLast"].ToString().ToLower() == "true")
                    {
                        //end of the session
                        await session.SetStateAsync(null);

                        await session.CloseAsync();
                    }
                    else
                    {
                        session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Order"]);
                        session_state.DeferredList.Remove(x);
                        await session.SetStateAsync(Serialize <SessionStateManager>(session_state));
                    }
                }
                else
                {
                    await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type or could not be processed", "Cannot deserialize this message as the type is unknown.");

                    session_state.DeferredList.Remove(x);
                    await session.SetStateAsync(Serialize <SessionStateManager>(session_state));
                }

                //------------------------------

                x++;
            }

            return(seq2);
        }
        private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, int EndOfSessionCount, ConsoleColor color)
        {
            int x = session_state.LastProcessedCount + 1;

            long seq2 = 0;

            if (session_state.DeferredList.TryGetValue(x, out long seq1))
            {
                while (true)
                {
                    if (!session_state.DeferredList.TryGetValue(x, out seq2))
                    {
                        break;
                    }

                    //-------------------------------
                    var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2);

                    if (ProcessMessages(deferredMessage, Color.White))
                    {
                        await session.CompleteAsync(deferredMessage.SystemProperties.LockToken);

                        session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Count"]);
                        session_state.DeferredList.Remove(x);
                        await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state));
                    }
                    else
                    {
                        await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type", "Cannot deserialize this message as the type in the Label prop is unknown.");

                        session_state.DeferredList.Remove(x);
                        await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state));
                    }

                    //------------------------------

                    x++;
                }
            }

            return(seq2);
        }