Ejemplo n.º 1
0
        public void CallToDisposedObjectShouldThrow()
        {
            var sequencer = new SequentialTaskExecutor();

            sequencer.Dispose();
            Assert.Throws <ObjectDisposedException>(() => { sequencer.ExecuteTask(() => Task.CompletedTask); });
        }
Ejemplo n.º 2
0
        public async Task EnsureNestedCallsAreExecutedDirectly()
        {
            const int NumberOfTasks = 10;
            var       sequencer     = new SequentialTaskExecutor();

            var tasks     = new List <Task>();
            var sequences = new List <int>();

            for (int i = 0; i < NumberOfTasks; i++)
            {
                int num = i;
                tasks.Add(sequencer.ExecuteTask(async() =>
                {
                    async Task func()
                    {
                        await sequencer.ExecuteTask(async() =>
                        {
                            await Task.Delay(1);
                            sequences.Add(num);
                        });
                    }
                    await func();
                }));
            }

            await Task.WhenAll(tasks.ToArray());

            for (int i = 0; i < NumberOfTasks; i++)
            {
                Assert.Equal(i, sequences[i]);
            }
        }