示例#1
0
        public override Value Next()
        {
            if (currentIterator.IsSome)
            {
                var value = currentIterator.Value.Next();
                if (value.IsNil)
                {
                    currentIterator = none <NSIterator>();
                }
                else
                {
                    return(value);
                }
            }

            while (iterators.Count > 0)
            {
                currentIterator = iterators.Dequeue();
                if (currentIterator.IsNone)
                {
                    return(NilValue);
                }

                currentIterator.Value.Reset();

                var value = currentIterator.Value.Next();
                if (!value.IsNil)
                {
                    return(value);
                }
            }

            return(NilValue);
        }
示例#2
0
        protected void balanceQueues(object sender, JobEmptyQueueArgs e)
        {
            if (totalCount() < refillThreshold)
            {
                e.Quit = true;
                return;
            }

            var newQueue = new MaybeQueue <Action <int> >();

            for (var i = 0; i < processorCount; i++)
            {
                while (queue.Dequeue(i).If(out var action))
                {
                    newQueue.Enqueue(action);
                }
            }

            queue.ResetCurrentAffinity();
            while (newQueue.Dequeue().If(out var item))
            {
                queue.Enqueue(item);
            }

            e.Quit = false;
        }