protected void PumpMessages(ProcessSession ps) { var queue = ps.SyncQueue; while (queue.Count > 0) { var m = queue.Dequeue(); if (m is TaskExecEvent) { var te = m as TaskExecEvent; if (te.FromTaskInstanceId == te.FromProcessInstanceId || InstanceId.IsSameProcessInstance(te.ParentTaskInstanceId, te.FromProcessInstanceId)) { DeliverTaskExecEvent(te); } else { MessageBus.Notify(te); } } else if (m is TaskControlCommand) { var tc = m as TaskControlCommand; if (InstanceId.IsSameProcessInstance(tc.FromProcessInstanceId, tc.ToTaskInstanceId)) { DeliverTaskControlMessage(tc); } else { MessageBus.Notify(tc); } } else { throw new Exception("Unexpected message in queue"); } } }