예제 #1
0
        public static async Task TestLock(ILockProvider lockProvider)
        {
            var keys = new string[] { "BBFCC95A-2FA1-45DA-A289-FF486C33AFC9", "56FCC95A-2FA1-45DA-A289-FF486C33AFC8" };
            var data = new Dictionary <string, List <int> >(keys.Select(x => new KeyValuePair <string, List <int> >(x, new List <int>())));

            Random ran = new Random();

            await Task.WhenAll(Enumerable.Range(0, 4).Select(async i =>
            {
                var key = keys[i % keys.Length];

                using (var @lock = await lockProvider.GetLock(key))
                {
                    await Task.Delay(ran.Next(100, 300));

                    for (int n = 0; n < 10; n++)
                    {
                        data[key].Add(10 * i + n);
                    }
                }
            }));

            foreach (var kv in data)
            {
                var sorted = kv.Value.OrderBy(x => x).ToList();
                Assert.Equal(sorted, kv.Value);
            }
        }