private void Processing() { Interlocked.Increment(ref _numberOfThreads); while (!_exit) { if ((DateTimeProvider.Now - _curDate).Days != 0) { _curDate = DateTimeProvider.Now; _messageWriter.CreateTodaysRepository(); } if (_stop && _messages.Count == 0) { _exit = true; } if (_messages.Count <= 0) { continue; } if (_messages.Count > 50 * _numberOfThreads && _numberOfThreads < Environment.ProcessorCount) { AddTask(); } if (_messages.Count < 50 * (_numberOfThreads - 1) && _numberOfThreads > 0) { DeleteTask(); } IMessage message; bool processed = false; while (!_messages.TryDequeue(out message)) { Thread.Sleep(10); } try { processed = _messageWriter.CreateNewMessageEntry(message); if (processed) { Interlocked.Decrement(ref _numberOfMessages); } } catch (Exception) { if (!processed) { _messages.Enqueue(message); } } } }