public void TestCantAddAfterCompleteAdding() { using (DynamicThreadPool testInst = new DynamicThreadPool(0, Environment.ProcessorCount, -1, "name")) { Assert.IsTrue(testInst.TryRun(() => { })); testInst.CompleteAdding(); Assert.IsFalse(testInst.TryRun(() => { })); testInst.Run(() => { }); } }
public void TestQueueCapacityBound() { using (DynamicThreadPool testInst = new DynamicThreadPool(0, Environment.ProcessorCount, 10, "name")) { Assert.AreEqual(10, testInst.QueueCapacity); int tryRunWorkItem = 100 * testInst.QueueCapacity; int runWorkCount = 0; int executedWork = 0; for (int i = 0; i < tryRunWorkItem; i++) { if (testInst.TryRun(() => { Thread.Sleep(500); Interlocked.Increment(ref executedWork); })) { runWorkCount++; } } testInst.Dispose(true, true, true); Assert.IsTrue(runWorkCount > 0); Assert.IsTrue(runWorkCount < tryRunWorkItem); Assert.AreEqual(runWorkCount, executedWork); } }
public void TestTryRunWork() { using (DynamicThreadPool testInst = new DynamicThreadPool(0, Environment.ProcessorCount, 100, "name")) { int wasExecuted = 0; bool wasRunned = testInst.TryRun(() => { Interlocked.Exchange(ref wasExecuted, 1); }); Assert.IsTrue(wasRunned); TimingAssert.AreEqual(5000, 1, () => Volatile.Read(ref wasExecuted)); } }