public void TestNextCompletionPart() { SymbolCompletionState state = new SymbolCompletionState(); Action reader = () => { while (state.IncompleteParts != 0) { Assert.True(SymbolCompletionState.HasAtMostOneBitSet((int)state.NextIncompletePart)); } }; Action writers = () => { Parallel.For(0, Math.Max(1, Environment.ProcessorCount - 1), t => { Random r = new Random(t); while (state.IncompleteParts != 0) { CompletionPart part = (CompletionPart)(1 << r.Next(8 * sizeof(CompletionPart))); state.NotePartComplete(part); } }); }; for (int i = 0; i < 1000; i++) { Parallel.Invoke(reader, writers); } }