public void Dequeues_until_stopped() { var messages = new NotifyingSingleQueue <string>(); messages.Enqueue(0, "a"); var sut = new Wait_for_work <string>(messages, () => { string result; var success = messages.TryDequeue(out result); return(new Tuple <bool, string>(success, result)); }); var results = new List <string>(); sut.Dequeued += _ => results.Add(_); ThreadPool.QueueUserWorkItem(_ => { sut.Dequeue_messages(() => { return(sut._running); }); }, null); Thread.Sleep(1000); sut.Stop(); Assert.AreEqual(1, results.Count); Assert.AreEqual("a", results[0]); string s; Assert.IsFalse(messages.TryDequeue(out s)); }
public void Stop_sets_termination_flag() { var messages = new NotifyingSingleQueue<int>(); var sut = new Wait_for_work<int>(messages, () => { int result; var success = messages.TryDequeue(out result); return new Tuple<bool, int>(success, result); }); sut._running = true; sut.Stop(); Assert.IsFalse(sut._running); }
public void Dequeueing_is_started() { var messages = new NotifyingSingleQueue<int>(); var sut = new Wait_for_work<int>(messages, () => { int result; var success = messages.TryDequeue(out result); return new Tuple<bool, int>(success, result); }); var are = new AutoResetEvent(false); sut.Start((_) => are.Set()); Assert.IsTrue(are.WaitOne(500)); }
public void Stop_sets_termination_flag() { var messages = new NotifyingSingleQueue <int>(); var sut = new Wait_for_work <int>(messages, () => { int result; var success = messages.TryDequeue(out result); return(new Tuple <bool, int>(success, result)); }); sut._running = true; sut.Stop(); Assert.IsFalse(sut._running); }
public void Dequeueing_is_started() { var messages = new NotifyingSingleQueue <int>(); var sut = new Wait_for_work <int>(messages, () => { int result; var success = messages.TryDequeue(out result); return(new Tuple <bool, int>(success, result)); }); var are = new AutoResetEvent(false); sut.Start((_) => are.Set()); Assert.IsTrue(are.WaitOne(500)); }
public Parallelize(int numberOfThreads, IConcurrentQueue<ScheduledTask> messages) { _messages = messages; _waitForWork = new List<Wait_for_work<ScheduledTask>>(); for (var i = 0; i < numberOfThreads; i++) { var wfw = new Wait_for_work<ScheduledTask>(_messages, () => { ScheduledTask result; var success = _messages.TryDequeue(out result); return new Tuple<bool, ScheduledTask>(success, result); }); wfw.Dequeued += _ => _.ContinueWith(_.Message); _waitForWork.Add(wfw); } }
public Serialize(int numberOfThreads, Func<IMessage,string> getQueueNameFromMessage) { _messages = new NotifyingMultiQueue<ScheduledTask>(); _getQueueNameFromMessage = getQueueNameFromMessage; _waitForWork = new List<Wait_for_work<ScheduledTask>>(); for (var i = 0; i < numberOfThreads; i++) { var wfw = new Wait_for_work<ScheduledTask>(_messages, () => { ScheduledTask result; var success = _messages.TryDequeue(Thread.CurrentThread.GetHashCode().ToString(), out result); return new Tuple<bool, ScheduledTask>(success, result); }); wfw.Dequeued += _ => _.ContinueWith(_.Message); _waitForWork.Add(wfw); } }
public void Dequeues_until_stopped() { var messages = new NotifyingSingleQueue<string>(); messages.Enqueue(0, "a"); var sut = new Wait_for_work<string>(messages, () => { string result; var success = messages.TryDequeue(out result); return new Tuple<bool, string>(success, result); }); var results = new List<string>(); sut.Dequeued += _ => results.Add(_); ThreadPool.QueueUserWorkItem(_ => { sut.Dequeue_messages(() => {return sut._running; }); }, null); Thread.Sleep(1000); sut.Stop(); Assert.AreEqual(1, results.Count); Assert.AreEqual("a", results[0]); string s; Assert.IsFalse(messages.TryDequeue(out s)); }