Inheritance: IWorkItem
Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
            }
        }