Esempio n. 1
0
        private static void Main(string[] args)
        {
            IDatabase       database  = RedisHelper.ConnectionRedisMultiplexer.GetDatabase(5);
            RedisLockHelper redisLock = new RedisLockHelper(database);

            int j = 0;

            ////测试1
            //for (int i = 0; i < 200; i++)
            //{
            //    ThreadPool.QueueUserWorkItem(s => Console.WriteLine(++j));//连库测试更直观
            //}

            //测试2
            for (int i = 0; i < 20; i++)
            {
                ThreadPool.QueueUserWorkItem(s =>
                {
                    var result = redisLock.LockAsync("Lock:Object", TimeSpan.FromMilliseconds(500)).GetAwaiter().GetResult();
                    if (result.Item1)
                    {
                        Console.WriteLine(++j);
                    }
                });
            }

            //threads.ForEach(p => p.Start());

            Console.Read();
        }
Esempio n. 2
0
        private void btnSend_Click(object sender, System.EventArgs e)
        {
            using (var redLock = RedisLockHelper.GrabLock(1)) // 有 async 的版本
            {
                // 確定取得 lock 所有權
                if (redLock.IsAcquired)
                {
                    // 執行需要獨佔資源的核心工作
                    RedisProducer.Publish("RedisSample1", new PressureTestContentEvent {
                        Content = "RedisSample1", CreateDateTime = DateTime.Now
                    });
                }
            }

            RedisProducer.Publish("RedisSample2", new PressureTestContentEvent {
                Content = "RedisSample2", CreateDateTime = DateTime.Now
            });

            RedisProducer.Publish("RedisSample3", new PressureTestContentEvent {
                Content = "RedisSample3", CreateDateTime = DateTime.Now
            });
        }