public void ManuallyStep() { using (var group = new ThreadGroup(0, 0)) { var queue = group.GetQueueForType <TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); bool exhausted; queue.Step(out exhausted, 1); Assert.IsTrue(exhausted); Assert.IsTrue(item.Ran); } }
public void ManuallyStep() { using (var group = new ThreadGroup(0, createBackgroundThreads: true, name: "ManuallyStep") { DefaultConcurrencyPadding = 0 }) { var queue = group.GetQueueForType <TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); bool exhausted; queue.Step(out exhausted, 1); Assert.IsTrue(exhausted); Assert.IsTrue(item.Ran); } }
public void AutoSpawnThread() { using (var group = new ThreadGroup(0, 1)) { var queue = group.GetQueueForType <TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); Assert.AreEqual(0, group.Count); Assert.IsFalse(item.Ran); group.NotifyQueuesChanged(); Assert.AreEqual(1, group.Count); queue.WaitUntilDrained(); Assert.IsTrue(item.Ran); } }
public void AutoSpawnThread() { using (var group = new ThreadGroup(0, 1)) { var queue = group.GetQueueForType<TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); var marker = queue.Mark(); Assert.AreEqual(0, group.Count); Assert.IsFalse(item.Ran); group.NotifyQueuesChanged(); Assert.AreEqual(1, group.Count); marker.Wait(); Assert.IsTrue(item.Ran); } }
public void WaitForMarker() { using (var group = new ThreadGroup(0, 0)) { var queue = group.GetQueueForType<TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); var marker = queue.Mark(); Assert.IsFalse(item.Ran); System.Threading.ThreadPool.QueueUserWorkItem((_) => { System.Threading.Thread.Sleep(250); bool exhausted; queue.Step(out exhausted, 1); Assert.IsTrue(exhausted); }); marker.Wait(); Assert.IsTrue(item.Ran); } }
public void ManuallyStep() { using (var group = new ThreadGroup(0, 0)) { var queue = group.GetQueueForType<TestWorkItem>(); var item = new TestWorkItem(); Assert.IsFalse(item.Ran); queue.Enqueue(item); bool exhausted; queue.Step(out exhausted, 1); Assert.IsTrue(exhausted); Assert.IsTrue(item.Ran); } }