public WorkSource() { availableWork = new ConcurrentQueue<IWork>(); freeCrawlers = new ConcurrentQueue<ManualResetEvent>(); workSourceScheduler = new WorkSourceScheduler(); workSourceScheduler.OnWorkReadyForProcess(x => { availableWork.Enqueue(x); NotifyFreeCrawler(); }); workSourceScheduler.StartManage(); }