示例#1
0
        public void InterlockedTest()
        {
            int threads = 4;
            var tasks   = new ThreadTaskQueue(threads);

            tasks.UseSystemThreadPool = false;
            for (int thread = 0; thread < threads; thread++)
            {
                tasks.Add(() =>
                {
                    int count = 100 * 1000 * 1000;
                    for (int i = 0; i < count; i++)
                    {
                        Interlocked.Increment(ref Value);
                    }
                    for (int i = 0; i < count; i++)
                    {
                        Interlocked.Decrement(ref Value);
                    }
                });
            }

            tasks.WaitForAllTasksCompleted();
            Assert.Equal(0, Value);
        }
示例#2
0
        public void MultiThreadingTest()
        {
            var      account    = TestHelper.GetTestAccount();
            var      component  = account.CreateRandomComponentControl();
            var      unitTest   = component.GetOrCreateUnitTestControl("UnitTest." + Guid.NewGuid());
            var      tasks      = new ThreadTaskQueue(10);
            var      random     = new Random();
            Response firstError = null;

            for (int i = 0; i < 20; i++)
            {
                tasks.Add(() =>
                {
                    int value = 0;
                    lock (tasks)
                    {
                        value = random.Next(100);
                    }
                    Response response = null;
                    if (value > 50)
                    {
                        response = unitTest.SendResult(UnitTestResult.Success, TimeSpan.FromDays(1));
                    }
                    else
                    {
                        response = unitTest.SendResult(UnitTestResult.Alarm, TimeSpan.FromDays(1));
                    }
                    if (response.Success == false && firstError == null)
                    {
                        firstError = response;
                    }
                });
            }
            tasks.WaitForAllTasksCompleted();

            account.GetClient().Flush();
            account.SaveAllCaches();

            if (firstError != null)
            {
                throw new Exception(firstError.ErrorMessage);
            }

            var actualDate = DateTime.Now.AddMinutes(30);
            var events     = account.GetClient().ApiService.GetEvents(new GetEventsData()
            {
                OwnerId  = unitTest.Info.Id,
                Category = EventCategory.UnitTestStatus,
                From     = actualDate
            }).Data;

            Assert.Equal(1, events.Count);// должно быть только 1 актуальное событие
        }