示例#1
0
        InboxDirective StatefulUserInbox(Actor <S, T> actor, IActorInbox inbox, UserControlMessage msg, ActorItem parent)
        {
            if (IsPaused)
            {
                userQueue = userQueue.Enqueue(msg);
            }
            else
            {
                while (userQueue.Count > 0)
                {
                    // Don't process messages if we've been paused
                    if (IsPaused)
                    {
                        return(InboxDirective.Pause);
                    }

                    var qmsg = userQueue.Peek();
                    userQueue = userQueue.Dequeue();
                    ProcessInboxDirective(ActorInboxCommon.UserMessageInbox(actor, inbox, qmsg, parent), qmsg);
                }

                if (IsPaused)
                {
                    // Don't process the message if we've been paused
                    userQueue = userQueue.Enqueue(msg);
                    return(InboxDirective.Pause);
                }

                return(ProcessInboxDirective(ActorInboxCommon.UserMessageInbox(actor, inbox, msg, parent), msg));
            }
            return(InboxDirective.Default);
        }
        InboxDirective StatefulUserInbox(Actor <S, T> actor, IActorInbox inbox, UserControlMessage msg, ActorItem parent)
        {
            if (IsPaused)
            {
                userQueue = userQueue.Enqueue(msg);
            }
            else
            {
                while (userQueue.Count > 0)
                {
                    var qmsg = userQueue.Peek();
                    userQueue = userQueue.Dequeue();
                    ActorInboxCommon.UserMessageInbox(actor, inbox, qmsg, parent);
                }
                var directive = ActorInboxCommon.UserMessageInbox(actor, inbox, msg, parent);

                if (directive == InboxDirective.PushToFrontOfQueue)
                {
                    var newQueue = Que <UserControlMessage> .Empty;

                    while (userQueue.Count > 0)
                    {
                        newQueue = newQueue.Enqueue(userQueue.Peek());
                        userQueue.Dequeue();
                    }

                    userQueue = newQueue;
                }
            }
            return(InboxDirective.Default);
        }
 Unit Run(Que <ProcessOp> ops)
 {
     if (ops.Count == 0)
     {
         return(unit);
     }
     ops.Peek().Run(ProcessId);
     return(Run(ops.Dequeue()));
 }
示例#4
0
 public static Option <T> peek <T>(Que <T> queue)
 {
     try
     {
         return(Some(queue.Peek()));
     }
     catch (InvalidOperationException)
     {
         return(None);
     }
 }
示例#5
0
 public static T peekUnsafe <T>(Que <T> queue) =>
 queue.Peek();