コード例 #1
0
ファイル: Interleave.cs プロジェクト: xtuyaowu/xparser
 private static ITask DequeuePendingItem(List <ReceiverTask> receivers)
 {
     foreach (ReceiverTask current in receivers)
     {
         ITask task = Interleave.DequeuePendingItem(current, 1);
         if (task != null)
         {
             return(task);
         }
     }
     return(null);
 }
コード例 #2
0
ファイル: Interleave.cs プロジェクト: xtuyaowu/xparser
 public ITask TryDequeuePendingTask(InterleaveReceivers receiverMask)
 {
     lock (_mutexBranches)
     {
         if ((receiverMask & InterleaveReceivers.Exclusive) > (InterleaveReceivers)0)
         {
             ITask result = Interleave.DequeuePendingItem(_mutexBranches);
             return(result);
         }
         if ((receiverMask & InterleaveReceivers.Concurrent) > (InterleaveReceivers)0)
         {
             ITask result = Interleave.DequeuePendingItem(_concurrentBranches);
             return(result);
         }
     }
     return(null);
 }
コード例 #3
0
ファイル: Interleave.cs プロジェクト: xtuyaowu/xparser
        public ITask TryDequeuePendingTask(ReceiverTask receiver, int queueDepthMin)
        {
            if (receiver == null)
            {
                throw new ArgumentNullException("receiver");
            }
            if (!(receiver.ArbiterContext is InterleaveReceiverContext))
            {
                throw new ArgumentException("receiver", Resource1.InterleaveInvalidReceiverTaskArgumentForTryDequeuePendingItems);
            }
            if (queueDepthMin <= 0)
            {
                throw new ArgumentOutOfRangeException("queueDepthMin");
            }
            ITask result;

            lock (_mutexBranches)
            {
                result = Interleave.DequeuePendingItem(receiver, queueDepthMin);
            }
            return(result);
        }