private void WorkingThreadStart()
        {
            try {
                while (true)
                {
                    // В этом цикле ждем пополнения очереди:
                    //_counter.WaitForIncrement();
                    _counter.WaitForCounterChangeWhileNotPredecate(count => count > 0);
                    while (true)
                    {
                        // в этом цикле опустошаем очередь
                        TItem dequeuedItem;
                        bool  shouldProceed = _items.TryDequeue(out dequeuedItem);
                        if (!shouldProceed)
                        {
                            break;
                        }

                        try {
                            _action(dequeuedItem);
                        }
                        catch {
                            continue;
                        }
                        finally {
                            _counter.DecrementCount();
                        }
                    }
                }
            }
            catch {
                //swallow all exeptions
            }
        }
Ejemplo n.º 2
0
 public void DecrementCount(TKey key)
 {
     GetCounter(key).DecrementCount();
     _totalCounter.DecrementCount();
 }
 /// <summary>
 /// Вызывается клиентом при выполнении асинхронной задачи,
 /// таким образом сообщяя, что асинхронная задача выполнена
 /// </summary>
 public void NotifyStarterAboutQueuedOperationComplete()
 {
     _flowCounter.DecrementCount();
 }