internal void Dequeue_messages(TryDequeueDelegate <T> trydequeue, Func <bool> isRunning) { var msg = default(T); do { if (trydequeue(out msg)) { Dequeued(msg); } else { _resource.Wait(Timeout.Infinite); } } while(isRunning()); }
internal void Start(Action <TryDequeueDelegate <T>, Func <bool> > backgroundTask, TryDequeueDelegate <T> trydequeue) { if (_th == null) { _th = new Thread(() => backgroundTask(trydequeue, () => _running)); _th.IsBackground = true; _running = true; _th.Start(); } }
public void Start(TryDequeueDelegate <T> trydequeue) { Start(Dequeue_messages, trydequeue); }