Esempio n. 1
0
        public async Task MonitorAdd_MultipleThreads()
        {
            // Good advice - Run without the debugger!!
            // Blocks or failes
            // Can succeed with the debugger and breakpoints in the "right" spots
            var completedCount = 0;
            var collection     = new ObservableCollectionAsync <string>();

            collection.CollectionChangedAsync += async(o, e) =>
            {
                await Task.Delay(1000);

                completedCount++;
            };

            // Deadlock
            List <Task> tasks = new List <Task>();

            tasks.Add(Task.Run(() => collection.MonitorAddAsync("value")));
            tasks.Add(Task.Run(() => collection.MonitorAddAsync("value")));
            tasks.Add(Task.Run(() => collection.MonitorAddAsync("value")));

            await Task.WhenAll(tasks);

            Assert.AreEqual(3, completedCount);
        }
Esempio n. 2
0
        public async Task SimpleAdd()
        {
            var completedCount = 0;
            var collection     = new ObservableCollectionAsync <string>();

            collection.CollectionChangedAsync += async(o, e) =>
            {
                await Task.Delay(1000);

                completedCount++;
            };

            await collection.AddAsync("value");

            Assert.AreEqual(1, completedCount);
        }
Esempio n. 3
0
        public async Task AutoResetEvent_MultipleThreads()
        {
            var completedCount = 0;
            var collection     = new ObservableCollectionAsync <string>();

            collection.CollectionChangedAsync += async(o, e) =>
            {
                await Task.Delay(1000);

                completedCount++;
            };

            List <Task> tasks = new List <Task>();

            tasks.Add(Task.Run(() => collection.AddAsync("value")));
            tasks.Add(Task.Run(() => collection.AddAsync("value")));
            tasks.Add(Task.Run(() => collection.AddAsync("value")));

            await Task.WhenAll(tasks);

            Assert.AreEqual(3, completedCount);
        }
Esempio n. 4
0
        public async Task SimpleAdd_MultipleThreads()
        {
            var completedCount = 0;
            var collection     = new ObservableCollectionAsync <string>();

            collection.CollectionChangedAsync += async(o, e) =>
            {
                await Task.Delay(1000);

                completedCount++;
            };

            // This should fail like AsyncEventTests.BusinessObject_Simple_MultipleThreads!!!
            List <Task> tasks = new List <Task>();

            tasks.Add(Task.Run(() => collection.AddAsync("value")));
            tasks.Add(Task.Run(() => collection.AddAsync("value")));
            tasks.Add(Task.Run(() => collection.AddAsync("value")));

            await Task.WhenAll(tasks);

            Assert.AreEqual(3, completedCount);
        }