Пример #1
0
        public void get_sequence_num_should_work_in_concurrent_situation()
        {
            using (var redis = new RedisService())
            {
                const string key = "SEQ_key";

                Action<object> action = (object id) =>
                {
                    Console.WriteLine(redis.GetNextSequenceNum(key));
                };

                Task t1 = Task.Factory.StartNew(action, "1");
                Task t2 = Task.Factory.StartNew(action, "2");
                Task t3 = Task.Factory.StartNew(action, "3");
                Task t4 = Task.Factory.StartNew(action, "4");
                Task t5 = Task.Factory.StartNew(action, "5");
                Task t6 = Task.Factory.StartNew(action, "6");
                Task t7 = Task.Factory.StartNew(action, "7");
                Task t8 = Task.Factory.StartNew(action, "8");
                Task t9 = Task.Factory.StartNew(action, "9");
                Task t0 = Task.Factory.StartNew(action, "10");

                t1.Wait();
                t2.Wait();
                t3.Wait();
                t4.Wait();
                t5.Wait();
                t6.Wait();
                t7.Wait();
                t8.Wait();
                t9.Wait();
                t0.Wait();

                long result = redis.GetNextSequenceNum(key);
                Assert.Equal(11, result);
                redis.FlushAll();
            }
        }