public void RemoveThreadTest() { var resultingList = new ConcurrentBag <int>(); var expectedList = new List <int>(); SetupTest((item) => { Thread.Sleep(1000); resultingList.Add(item); }); using (threadCollection = new ThreadCollection(new SimpleThreadPoolSettings(2))) { var addResult = AddThreads(2); Assert.IsTrue(addResult); for (var i = 0; i < 2; i++) { queue.Add(i); expectedList.Add(i); Thread.Sleep(500); } queue.CompleteAdding(); // просим отменится второй поток, который сейчас работает var removeResult = threadCollection.TryRemoveThread(); Assert.IsTrue(removeResult); } // если бы dispose не дождался тот второй отменённый поток, то в finalList не попал бы результат var finalList = new List <int>(resultingList); finalList.Sort(); Assert.AreEqual(expectedList.Aggregate(string.Empty, (res, i) => res + i), finalList.Aggregate(string.Empty, (res, i) => res + i)); }
public void CannotRemoveThreadTest() { var resultingList = new ConcurrentBag <int>(); SetupTest((item) => { resultingList.Add(item); }); using (threadCollection = new ThreadCollection(new SimpleThreadPoolSettings(1))) { var addResult = AddThreads(1); Assert.IsTrue(addResult); var removeResult = threadCollection.TryRemoveThread(); queue.CompleteAdding(); Assert.IsFalse(removeResult); } }