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 } }
public void DecrementCount(TKey key) { GetCounter(key).DecrementCount(); _totalCounter.DecrementCount(); }
/// <summary> /// Вызывается клиентом при выполнении асинхронной задачи, /// таким образом сообщяя, что асинхронная задача выполнена /// </summary> public void NotifyStarterAboutQueuedOperationComplete() { _flowCounter.DecrementCount(); }